Message ID | 1440540624-7998-12-git-send-email-marcandre.lureau@redhat.com |
---|---|
State | New |
Headers | show |
Quoting marcandre.lureau@redhat.com (2015-08-25 17:10:23) > From: Marc-André Lureau <marcandre.lureau@redhat.com> > > 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> > --- > qga/main.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 62 insertions(+) > > diff --git a/qga/main.c b/qga/main.c > index 154975c..a47310b 100644 > --- a/qga/main.c > +++ b/qga/main.c > @@ -941,6 +941,7 @@ typedef struct GAConfig { > GList *blacklist; > int daemonize; > GLogLevelFlags log_level; > + int dumpconf; > } GAConfig; > > static void config_load(GAConfig *config) > @@ -1009,6 +1010,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_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, ','); Since we have the list_join() helper to convert config->blacklist, it makes me wonder if there's really any need to add/init config->bliststr in the previous patch. This patch looks good though: Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com> > + 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); > + if (keyfile) { > + 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"; > @@ -1016,6 +1069,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 > @@ -1067,6 +1121,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); > @@ -1310,6 +1367,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: > -- > 2.4.3 >
Hi On Wed, Aug 26, 2015 at 1:13 AM, Michael Roth <mdroth@linux.vnet.ibm.com> wrote: > Since we have the list_join() helper to convert config->blacklist, it > makes me wonder if there's really any need to add/init config->bliststr > in the previous patch. It is just to keep the string in memory. split_list() doesn't dup the given string, it merely changes it and add pointers to the list. I'll add a comment about it in the code.
diff --git a/qga/main.c b/qga/main.c index 154975c..a47310b 100644 --- a/qga/main.c +++ b/qga/main.c @@ -941,6 +941,7 @@ typedef struct GAConfig { GList *blacklist; int daemonize; GLogLevelFlags log_level; + int dumpconf; } GAConfig; static void config_load(GAConfig *config) @@ -1009,6 +1010,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_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); + if (keyfile) { + 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"; @@ -1016,6 +1069,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 @@ -1067,6 +1121,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); @@ -1310,6 +1367,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: