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
|
||||
" -b, --blacklist comma-separated list of RPCs to disable (no spaces, \"?\"\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"
|
||||
"\n"
|
||||
"Report bugs to <mdroth@linux.vnet.ibm.com>\n"
|
||||
@ -936,6 +938,7 @@ typedef struct GAConfig {
|
||||
GList *blacklist;
|
||||
int daemonize;
|
||||
GLogLevelFlags log_level;
|
||||
int dumpconf;
|
||||
} GAConfig;
|
||||
|
||||
static void config_load(GAConfig *config)
|
||||
@ -1002,6 +1005,58 @@ end:
|
||||
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)
|
||||
{
|
||||
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[] = {
|
||||
{ "help", 0, NULL, 'h' },
|
||||
{ "version", 0, NULL, 'V' },
|
||||
{ "dump-conf", 0, NULL, 'D' },
|
||||
{ "logfile", 1, NULL, 'l' },
|
||||
{ "pidfile", 1, NULL, 'f' },
|
||||
#ifdef CONFIG_FSFREEZE
|
||||
@ -1066,6 +1122,9 @@ static void config_parse(GAConfig *config, int argc, char **argv)
|
||||
case 'd':
|
||||
config->daemonize = 1;
|
||||
break;
|
||||
case 'D':
|
||||
config->dumpconf = 1;
|
||||
break;
|
||||
case 'b': {
|
||||
if (is_help_option(optarg)) {
|
||||
qmp_for_each_command(ga_print_cmd, NULL);
|
||||
@ -1314,6 +1373,11 @@ int main(int argc, char **argv)
|
||||
config->state_dir);
|
||||
s->frozen = check_is_frozen(s);
|
||||
|
||||
if (config->dumpconf) {
|
||||
config_dump(config);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ret = run_agent(s, config);
|
||||
|
||||
end:
|
||||
|
Loading…
Reference in New Issue
Block a user