Re: [Qemu-devel] [PATCH 10/12] qga: add --dump-conf option

2015-08-25 Thread Michael Roth
Quoting Marc-André Lureau (2015-07-01 06:47:45)
 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.lur...@gmail.com
 ---
  qga/main.c | 46 +-
  1 file changed, 45 insertions(+), 1 deletion(-)
 
 diff --git a/qga/main.c b/qga/main.c
 index bd87050..f6dbb3e 100644
 --- a/qga/main.c
 +++ b/qga/main.c
 @@ -215,6 +215,7 @@ 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 the configuration and exit\n
-h, --helpdisplay this help and exit\n
  \n
  Report bugs to mdr...@linux.vnet.ibm.com\n
 @@ -904,6 +905,21 @@ static void ga_print_cmd(QmpCommand *cmd, void *opaque)
  printf(%s\n, qmp_command_name(cmd));
  }
 
 +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 GList *split_list(gchar *str, const gchar separator)
  {
  GList *list = NULL;
 @@ -936,9 +952,28 @@ static char *state_dir;
  static const char *service;
  #endif
  static GList *blacklist;
 -static int daemonize;
 +static int daemonize, dumpconf;
  static GLogLevelFlags log_level = G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL;
 
 +static void dump_config(void)
 +{
 +gchar *bl = list_join(blacklist, ',');
 +
 +printf([general]\n);
 +printf(daemonize = %d\n, daemonize);
 +printf(pidfile = %s\n, pid_filepath);
 +if (log_filepath) {
 +printf(logfile = %s\n, log_filepath);
 +}
 +printf(verbose = %d\n, log_level == G_LOG_LEVEL_MASK);
 +printf(method = %s\n, method);
 +printf(path = %s\n, device_path);
 +printf(statedir = %s\n, state_dir);
 +printf(blacklist = %s\n, bl);

I think we're missing fsfreeze_hook option here.

To me it seems cleaner to actually create the GKeyFile from current
options, then let GLib do all the work of generation a config file
we can spit out (g_key_file_to_data() should do it i think).

That, paired with the idea of having a GAConfig structure to
encapulate all the config options, might warrant restructuring
things a bit so that we have a
gkeyfile_to_gaconfig()/gkeyfile_from_gaconfig() pair to use for
reading/dumping configs while keeping all the options in an
easily trackable place.

 +
 +g_free(bl);
 +}
 +
  static void option_parse(int argc, char **argv)
  {
  const char *sopt = hVvdm:p:l:f:F::b:s:t:D;
 @@ -946,6 +981,7 @@ static void option_parse(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
 @@ -1031,6 +1067,9 @@ static void option_parse(int argc, char **argv)
  }
  break;
  #endif
 +case 'D':
 +dumpconf = 1;
 +break;
  case 'h':
  usage(argv[0]);
  exit(EXIT_SUCCESS);
 @@ -1205,6 +1244,11 @@ int main(int argc, char **argv)
  }
  }
 
 +if (dumpconf) {
 +dump_config();
 +goto end;
 +}
 +
  s-log_level = log_level;
  s-log_file = stderr;
  #ifdef CONFIG_FSFREEZE
 -- 
 2.4.3
 




Re: [Qemu-devel] [PATCH 10/12] qga: add --dump-conf option

2015-08-25 Thread Marc-André Lureau
On Tue, Aug 25, 2015 at 7:11 PM, Michael Roth mdr...@linux.vnet.ibm.com wrote:
 I think we're missing fsfreeze_hook option here.


good catch

 To me it seems cleaner to actually create the GKeyFile from current
 options, then let GLib do all the work of generation a config file
 we can spit out (g_key_file_to_data() should do it i think).

I don't mind, why not.

 That, paired with the idea of having a GAConfig structure to
 encapulate all the config options, might warrant restructuring
 things a bit so that we have a
 gkeyfile_to_gaconfig()/gkeyfile_from_gaconfig() pair to use for
 reading/dumping configs while keeping all the options in an
 easily trackable place.




-- 
Marc-André Lureau



[Qemu-devel] [PATCH 10/12] qga: add --dump-conf option

2015-07-01 Thread Marc-André Lureau
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.lur...@gmail.com
---
 qga/main.c | 46 +-
 1 file changed, 45 insertions(+), 1 deletion(-)

diff --git a/qga/main.c b/qga/main.c
index bd87050..f6dbb3e 100644
--- a/qga/main.c
+++ b/qga/main.c
@@ -215,6 +215,7 @@ 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 the configuration and exit\n
   -h, --helpdisplay this help and exit\n
 \n
 Report bugs to mdr...@linux.vnet.ibm.com\n
@@ -904,6 +905,21 @@ static void ga_print_cmd(QmpCommand *cmd, void *opaque)
 printf(%s\n, qmp_command_name(cmd));
 }
 
+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 GList *split_list(gchar *str, const gchar separator)
 {
 GList *list = NULL;
@@ -936,9 +952,28 @@ static char *state_dir;
 static const char *service;
 #endif
 static GList *blacklist;
-static int daemonize;
+static int daemonize, dumpconf;
 static GLogLevelFlags log_level = G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL;
 
+static void dump_config(void)
+{
+gchar *bl = list_join(blacklist, ',');
+
+printf([general]\n);
+printf(daemonize = %d\n, daemonize);
+printf(pidfile = %s\n, pid_filepath);
+if (log_filepath) {
+printf(logfile = %s\n, log_filepath);
+}
+printf(verbose = %d\n, log_level == G_LOG_LEVEL_MASK);
+printf(method = %s\n, method);
+printf(path = %s\n, device_path);
+printf(statedir = %s\n, state_dir);
+printf(blacklist = %s\n, bl);
+
+g_free(bl);
+}
+
 static void option_parse(int argc, char **argv)
 {
 const char *sopt = hVvdm:p:l:f:F::b:s:t:D;
@@ -946,6 +981,7 @@ static void option_parse(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
@@ -1031,6 +1067,9 @@ static void option_parse(int argc, char **argv)
 }
 break;
 #endif
+case 'D':
+dumpconf = 1;
+break;
 case 'h':
 usage(argv[0]);
 exit(EXIT_SUCCESS);
@@ -1205,6 +1244,11 @@ int main(int argc, char **argv)
 }
 }
 
+if (dumpconf) {
+dump_config();
+goto end;
+}
+
 s-log_level = log_level;
 s-log_file = stderr;
 #ifdef CONFIG_FSFREEZE
-- 
2.4.3