qga: add --dump-conf option
This new option allows to review the agent configuration, and ease the task of writing a configuration file. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com> Reviewed-by: Denis V. Lunev <den@openvz.org> * removed unecessary keyfile != NULL prior to free * documented --dump-conf is qemu-ga --help output Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
parent
e236d060cb
commit
aeadcbb633
64
qga/main.c
64
qga/main.c
@ -216,6 +216,8 @@ static void usage(const char *cmd)
|
|||||||
#endif
|
#endif
|
||||||
" -b, --blacklist comma-separated list of RPCs to disable (no spaces, \"?\"\n"
|
" -b, --blacklist comma-separated list of RPCs to disable (no spaces, \"?\"\n"
|
||||||
" to list available RPCs)\n"
|
" to list available RPCs)\n"
|
||||||
|
" -D, --dump-conf dump a qemu-ga config file based on current config\n"
|
||||||
|
" options / command-line parameters to stdout\n"
|
||||||
" -h, --help display this help and exit\n"
|
" -h, --help display this help and exit\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Report bugs to <mdroth@linux.vnet.ibm.com>\n"
|
"Report bugs to <mdroth@linux.vnet.ibm.com>\n"
|
||||||
@ -936,6 +938,7 @@ typedef struct GAConfig {
|
|||||||
GList *blacklist;
|
GList *blacklist;
|
||||||
int daemonize;
|
int daemonize;
|
||||||
GLogLevelFlags log_level;
|
GLogLevelFlags log_level;
|
||||||
|
int dumpconf;
|
||||||
} GAConfig;
|
} GAConfig;
|
||||||
|
|
||||||
static void config_load(GAConfig *config)
|
static void config_load(GAConfig *config)
|
||||||
@ -1002,6 +1005,58 @@ end:
|
|||||||
g_clear_error(&gerr);
|
g_clear_error(&gerr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gchar *list_join(GList *list, const gchar separator)
|
||||||
|
{
|
||||||
|
GString *str = g_string_new("");
|
||||||
|
|
||||||
|
while (list) {
|
||||||
|
str = g_string_append(str, (gchar *)list->data);
|
||||||
|
list = g_list_next(list);
|
||||||
|
if (list) {
|
||||||
|
str = g_string_append_c(str, separator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_string_free(str, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void config_dump(GAConfig *config)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
GKeyFile *keyfile;
|
||||||
|
gchar *tmp;
|
||||||
|
|
||||||
|
keyfile = g_key_file_new();
|
||||||
|
g_assert(keyfile);
|
||||||
|
|
||||||
|
g_key_file_set_boolean(keyfile, "general", "daemon", config->daemonize);
|
||||||
|
g_key_file_set_string(keyfile, "general", "method", config->method);
|
||||||
|
g_key_file_set_string(keyfile, "general", "path", config->channel_path);
|
||||||
|
if (config->log_filepath) {
|
||||||
|
g_key_file_set_string(keyfile, "general", "logfile",
|
||||||
|
config->log_filepath);
|
||||||
|
}
|
||||||
|
g_key_file_set_string(keyfile, "general", "pidfile", config->pid_filepath);
|
||||||
|
#ifdef CONFIG_FSFREEZE
|
||||||
|
if (config->fsfreeze_hook) {
|
||||||
|
g_key_file_set_string(keyfile, "general", "fsfreeze-hook",
|
||||||
|
config->fsfreeze_hook);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
g_key_file_set_string(keyfile, "general", "statedir", config->state_dir);
|
||||||
|
g_key_file_set_boolean(keyfile, "general", "verbose",
|
||||||
|
config->log_level == G_LOG_LEVEL_MASK);
|
||||||
|
tmp = list_join(config->blacklist, ',');
|
||||||
|
g_key_file_set_string(keyfile, "general", "blacklist", tmp);
|
||||||
|
g_free(tmp);
|
||||||
|
|
||||||
|
tmp = g_key_file_to_data(keyfile, NULL, &error);
|
||||||
|
printf("%s", tmp);
|
||||||
|
|
||||||
|
g_free(tmp);
|
||||||
|
g_key_file_free(keyfile);
|
||||||
|
}
|
||||||
|
|
||||||
static void config_parse(GAConfig *config, int argc, char **argv)
|
static void config_parse(GAConfig *config, int argc, char **argv)
|
||||||
{
|
{
|
||||||
const char *sopt = "hVvdm:p:l:f:F::b:s:t:D";
|
const char *sopt = "hVvdm:p:l:f:F::b:s:t:D";
|
||||||
@ -1009,6 +1064,7 @@ static void config_parse(GAConfig *config, int argc, char **argv)
|
|||||||
const struct option lopt[] = {
|
const struct option lopt[] = {
|
||||||
{ "help", 0, NULL, 'h' },
|
{ "help", 0, NULL, 'h' },
|
||||||
{ "version", 0, NULL, 'V' },
|
{ "version", 0, NULL, 'V' },
|
||||||
|
{ "dump-conf", 0, NULL, 'D' },
|
||||||
{ "logfile", 1, NULL, 'l' },
|
{ "logfile", 1, NULL, 'l' },
|
||||||
{ "pidfile", 1, NULL, 'f' },
|
{ "pidfile", 1, NULL, 'f' },
|
||||||
#ifdef CONFIG_FSFREEZE
|
#ifdef CONFIG_FSFREEZE
|
||||||
@ -1066,6 +1122,9 @@ static void config_parse(GAConfig *config, int argc, char **argv)
|
|||||||
case 'd':
|
case 'd':
|
||||||
config->daemonize = 1;
|
config->daemonize = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'D':
|
||||||
|
config->dumpconf = 1;
|
||||||
|
break;
|
||||||
case 'b': {
|
case 'b': {
|
||||||
if (is_help_option(optarg)) {
|
if (is_help_option(optarg)) {
|
||||||
qmp_for_each_command(ga_print_cmd, NULL);
|
qmp_for_each_command(ga_print_cmd, NULL);
|
||||||
@ -1314,6 +1373,11 @@ int main(int argc, char **argv)
|
|||||||
config->state_dir);
|
config->state_dir);
|
||||||
s->frozen = check_is_frozen(s);
|
s->frozen = check_is_frozen(s);
|
||||||
|
|
||||||
|
if (config->dumpconf) {
|
||||||
|
config_dump(config);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
ret = run_agent(s, config);
|
ret = run_agent(s, config);
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
Loading…
Reference in New Issue
Block a user