[Pkg-libvirt-commits] [libguestfs] 15/63: p2v/v2v: List output drivers in `virt-v2v --machine-readable', and use that in virt-p2v.

Hilko Bengen bengen at moszumanska.debian.org
Fri Oct 3 14:43:25 UTC 2014


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to annotated tag debian/1%1.27.39-1
in repository libguestfs.

commit 03ed5a790b571db2ff5f96f58bdbc01af4646cb2
Author: Richard W.M. Jones <rjones at redhat.com>
Date:   Tue Sep 2 19:34:09 2014 +0100

    p2v/v2v: List output drivers in `virt-v2v --machine-readable', and use that in virt-p2v.
    
    The new output of virt-v2v --machine-readable now lists the input and
    output drivers available in the binary:
    
      $ virt-v2v --machine-readable
      virt-v2v
      libguestfs-rewrite
      input:disk
      input:libvirt
      input:libvirtxml
      output:glance
      output:libvirt
      output:local
      output:rhev
    
    With this information, we can now pre-populate the virt-p2v GUI
    combo box.
---
 p2v/gui.c                                 |  70 +++++++---
 p2v/p2v.h                                 |   4 +
 p2v/ssh.c                                 | 217 +++++++++++++++++++++---------
 po/POTFILES-ml                            |   1 +
 v2v/Makefile.am                           |   6 +-
 v2v/TODO                                  |   1 -
 v2v/cmdline.ml                            |   2 +
 v2v/input_disk.ml                         |   1 +
 v2v/input_libvirt.ml                      |   1 +
 v2v/input_libvirtxml.ml                   |   1 +
 v2v/{output_local.ml => modules_list.ml}  |  38 ++----
 v2v/{output_local.ml => modules_list.mli} |  37 ++---
 v2v/output_RHEV.ml                        |   1 +
 v2v/output_glance.ml                      |   1 +
 v2v/output_libvirt.ml                     |   1 +
 v2v/output_local.ml                       |   1 +
 16 files changed, 239 insertions(+), 144 deletions(-)

diff --git a/p2v/gui.c b/p2v/gui.c
index 430b18d..9cffd1b 100644
--- a/p2v/gui.c
+++ b/p2v/gui.c
@@ -90,6 +90,7 @@ static void test_connection_clicked (GtkWidget *w, gpointer data);
 static void *test_connection_thread (void *data);
 static void about_button_clicked (GtkWidget *w, gpointer data);
 static void connection_next_clicked (GtkWidget *w, gpointer data);
+static void repopulate_output_combo (struct config *config);
 
 static void
 create_connection_dialog (struct config *config)
@@ -470,23 +471,7 @@ create_conversion_dialog (struct config *config)
                     0, 1, 0, 1, GTK_FILL, GTK_FILL, 1, 1);
   o_combo = gtk_combo_box_new_text ();
   gtk_widget_set_tooltip_markup (o_combo, _("<b>libvirt</b> means send the converted guest to libvirt-managed KVM on the conversion server.  <b>local</b> means put it in a directory on the conversion server.  <b>rhev</b> means write it to RHEV-M/oVirt.  <b>glance</b> means write it to OpenStack Glance.  See the virt-v2v(1) manual page for more information about output options."));
-  /* XXX Add list of input and output drivers to virt-v2v --machine-readable
-   * and pick them up for this list.
-   */
-  gtk_combo_box_append_text (GTK_COMBO_BOX (o_combo), "libvirt");
-  gtk_combo_box_append_text (GTK_COMBO_BOX (o_combo), "local");
-  gtk_combo_box_append_text (GTK_COMBO_BOX (o_combo), "rhev");
-  gtk_combo_box_append_text (GTK_COMBO_BOX (o_combo), "glance");
-  if (config->output) {
-    if (STREQ (config->output, "libvirt"))
-      gtk_combo_box_set_active (GTK_COMBO_BOX (o_combo), 0);
-    else if (STREQ (config->output, "local") || STREQ (config->output, "disk"))
-      gtk_combo_box_set_active (GTK_COMBO_BOX (o_combo), 1);
-    else if (STREQ (config->output, "rhev") || STREQ (config->output, "ovirt"))
-      gtk_combo_box_set_active (GTK_COMBO_BOX (o_combo), 2);
-    else if (STREQ (config->output, "glance"))
-      gtk_combo_box_set_active (GTK_COMBO_BOX (o_combo), 3);
-  }
+  repopulate_output_combo (config);
   gtk_table_attach (GTK_TABLE (output_tbl), o_combo,
                     1, 2, 0, 1, GTK_FILL, GTK_FILL, 1, 1);
 
@@ -627,6 +612,57 @@ show_conversion_dialog (void)
 
   /* Show the conversion dialog. */
   gtk_widget_show_all (conv_dlg);
+
+  /* output_drivers may have been updated, so repopulate o_combo. */
+  repopulate_output_combo (NULL);
+}
+
+static void
+repopulate_output_combo (struct config *config)
+{
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  CLEANUP_FREE char *output;
+  size_t i;
+
+  /* Which driver is currently selected? */
+  if (config && config->output)
+    output = strdup (config->output);
+  else
+    output = gtk_combo_box_get_active_text (GTK_COMBO_BOX (o_combo));
+
+  /* Remove existing rows in o_combo. */
+  model = gtk_combo_box_get_model (GTK_COMBO_BOX (o_combo));
+  while (gtk_tree_model_get_iter_first (model, &iter)) {
+    gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+  }
+
+  /* List of output_drivers from virt-v2v not read yet, so present
+   * a standard set of drivers.
+   */
+  if (output_drivers == NULL) {
+    gtk_combo_box_append_text (GTK_COMBO_BOX (o_combo), "libvirt");
+    gtk_combo_box_append_text (GTK_COMBO_BOX (o_combo), "local");
+    gtk_combo_box_append_text (GTK_COMBO_BOX (o_combo), "rhev");
+    if (output == NULL || STREQ (output, "libvirt"))
+      gtk_combo_box_set_active (GTK_COMBO_BOX (o_combo), 0);
+    else if (STREQ (output, "local"))
+      gtk_combo_box_set_active (GTK_COMBO_BOX (o_combo), 1);
+    else if (STREQ (output, "rhev"))
+      gtk_combo_box_set_active (GTK_COMBO_BOX (o_combo), 2);
+  }
+  /* List of -o options read from remote virt-v2v --machine-readable. */
+  else {
+    for (i = 0; output_drivers[i] != NULL; ++i)
+      gtk_combo_box_append_text (GTK_COMBO_BOX (o_combo), output_drivers[i]);
+    if (output) {
+      for (i = 0; output_drivers[i] != NULL; ++i)
+        if (STREQ (output, output_drivers[i]))
+          gtk_combo_box_set_active (GTK_COMBO_BOX (o_combo), i);
+    }
+    else
+      gtk_combo_box_set_active (GTK_COMBO_BOX (o_combo), 0);
+  }
 }
 
 static void
diff --git a/p2v/p2v.h b/p2v/p2v.h
index 3ada7b6..6067d5f 100644
--- a/p2v/p2v.h
+++ b/p2v/p2v.h
@@ -109,6 +109,10 @@ extern int v2v_major;
 extern int v2v_minor;
 extern int v2v_release;
 
+/* input and output drivers (read from remote). */
+extern char **input_drivers;
+extern char **output_drivers;
+
 /* authors.c */
 extern const char *authors[];
 
diff --git a/p2v/ssh.c b/p2v/ssh.c
index 993beb4..15ca50c 100644
--- a/p2v/ssh.c
+++ b/p2v/ssh.c
@@ -59,6 +59,8 @@
 int v2v_major;
 int v2v_minor;
 int v2v_release;
+char **input_drivers = NULL;
+char **output_drivers = NULL;
 
 static char *ssh_error;
 
@@ -98,7 +100,9 @@ static void free_regexps (void) __attribute__((destructor));
 static pcre *password_re;
 static pcre *prompt_re;
 static pcre *version_re;
-static pcre *libguestfs_rewrite_re;
+static pcre *feature_libguestfs_rewrite_re;
+static pcre *feature_input_re;
+static pcre *feature_output_re;
 static pcre *portfwd_re;
 
 static void
@@ -123,7 +127,9 @@ compile_regexps (void)
   COMPILE (prompt_re, "###([0123456789abcdefghijklmnopqrstuvwxyz]{8})### ", 0);
   COMPILE (version_re,
            "virt-v2v ([1-9]\\d*)\\.([1-9]\\d*)\\.([1-9]\\d*)", 0);
-  COMPILE (libguestfs_rewrite_re, "libguestfs-rewrite", 0);
+  COMPILE (feature_libguestfs_rewrite_re, "libguestfs-rewrite", 0);
+  COMPILE (feature_input_re, "input:(\\w*)", 0);
+  COMPILE (feature_output_re, "output:(\\w*)", 0);
   COMPILE (portfwd_re, "Allocated port (\\d+) for remote forward", 0);
 }
 
@@ -133,7 +139,9 @@ free_regexps (void)
   pcre_free (password_re);
   pcre_free (prompt_re);
   pcre_free (version_re);
-  pcre_free (libguestfs_rewrite_re);
+  pcre_free (feature_libguestfs_rewrite_re);
+  pcre_free (feature_input_re);
+  pcre_free (feature_output_re);
   pcre_free (portfwd_re);
 }
 
@@ -319,6 +327,9 @@ start_ssh (struct config *config, char **extra_args, int wait_prompt)
   return h;
 }
 
+static void add_input_driver (const char *name, size_t len);
+static void add_output_driver (const char *name, size_t len);
+
 #pragma GCC diagnostic ignored "-Wsuggest-attribute=noreturn" /* WTF? */
 int
 test_connection (struct config *config)
@@ -341,54 +352,62 @@ test_connection (struct config *config)
     return -1;
   }
 
-  switch (mexp_expect (h,
-                       (mexp_regexp[]) {
-                         { 100, .re = version_re },
-                         { 101, .re = prompt_re },
-                         { 0 }
-                       }, ovector, ovecsize)) {
-  case 100:                     /* Got version string. */
-    major_str = strndup (&h->buffer[ovector[2]], ovector[3]-ovector[2]);
-    minor_str = strndup (&h->buffer[ovector[4]], ovector[5]-ovector[4]);
-    release_str = strndup (&h->buffer[ovector[6]], ovector[7]-ovector[6]);
-    sscanf (major_str, "%d", &v2v_major);
-    sscanf (minor_str, "%d", &v2v_minor);
-    sscanf (release_str, "%d", &v2v_release);
+  for (;;) {
+    switch (mexp_expect (h,
+                         (mexp_regexp[]) {
+                           { 100, .re = version_re },
+                           { 101, .re = prompt_re },
+                           { 0 }
+                         }, ovector, ovecsize)) {
+    case 100:                   /* Got version string. */
+      major_str = strndup (&h->buffer[ovector[2]], ovector[3]-ovector[2]);
+      minor_str = strndup (&h->buffer[ovector[4]], ovector[5]-ovector[4]);
+      release_str = strndup (&h->buffer[ovector[6]], ovector[7]-ovector[6]);
+      sscanf (major_str, "%d", &v2v_major);
+      sscanf (minor_str, "%d", &v2v_minor);
+      sscanf (release_str, "%d", &v2v_release);
 #if DEBUG_STDERR
-    fprintf (stderr, "%s: remote virt-v2v version: %d.%d.%d\n",
-             program_name, v2v_major, v2v_minor, v2v_release);
+      fprintf (stderr, "%s: remote virt-v2v version: %d.%d.%d\n",
+               program_name, v2v_major, v2v_minor, v2v_release);
 #endif
-    if (v2v_major < 1 || v2v_major > 1) {
+      if (v2v_major < 1 || v2v_major > 1) {
+        mexp_close (h);
+        set_ssh_error ("invalid version major (%d)", v2v_major);
+        return -1;
+      }
+      break;
+
+    case 101:             /* Got the prompt. */
+      goto end_of_version;
+
+    case MEXP_EOF:
       mexp_close (h);
-      set_ssh_error ("invalid version major (%d)", v2v_major);
+      set_ssh_error ("unexpected end of file waiting virt-v2v -V output");
       return -1;
-    }
-    break;
-
-  case 101:                     /* Got the prompt, but no version string. */
-    mexp_close (h);
-    set_ssh_error ("virt-v2v is not installed on the conversion server, "
-                   "or it might be a too old version");
-    return -1;
 
-  case MEXP_EOF:
-    mexp_close (h);
-    set_ssh_error ("unexpected end of file waiting virt-v2v -V output");
-    return -1;
+    case MEXP_TIMEOUT:
+      mexp_close (h);
+      set_ssh_error ("timeout waiting for virt-v2v -V output");
+      return -1;
 
-  case MEXP_TIMEOUT:
-    mexp_close (h);
-    set_ssh_error ("timeout waiting for virt-v2v -V output");
-    return -1;
+    case MEXP_ERROR:
+      set_ssh_error ("mexp_expect: %m");
+      mexp_close (h);
+      return -1;
 
-  case MEXP_ERROR:
-    set_ssh_error ("mexp_expect: %m");
-    mexp_close (h);
-    return -1;
+    case MEXP_PCRE_ERROR:
+      set_ssh_error ("PCRE error: %d\n", h->pcre_error);
+      mexp_close (h);
+      return -1;
+    }
+  }
+ end_of_version:
 
-  case MEXP_PCRE_ERROR:
-    set_ssh_error ("PCRE error: %d\n", h->pcre_error);
+  /* Got the prompt but no version number. */
+  if (v2v_major == 0) {
     mexp_close (h);
+    set_ssh_error ("virt-v2v is not installed on the conversion server, "
+                   "or it might be a too old version");
     return -1;
   }
 
@@ -400,35 +419,58 @@ test_connection (struct config *config)
     return -1;
   }
 
-  switch (mexp_expect (h,
-                       (mexp_regexp[]) {
-                         { 100, .re = libguestfs_rewrite_re },
-                         { 0 }
-                       }, ovector, ovecsize)) {
-  case 100:                     /* Got feature: libguestfs-rewrite. */
-    feature_libguestfs_rewrite = 1;
-    break;
+  for (;;) {
+    CLEANUP_FREE char *feature = NULL;
 
-  case MEXP_EOF:
-    mexp_close (h);
-    set_ssh_error ("unexpected end of file waiting virt-v2v --machine-readable output");
-    return -1;
+    switch (mexp_expect (h,
+                         (mexp_regexp[]) {
+                           { 100, .re = feature_libguestfs_rewrite_re },
+                           { 101, .re = feature_input_re },
+                           { 102, .re = feature_output_re },
+                           { 103, .re = prompt_re },
+                           { 0 }
+                         }, ovector, ovecsize)) {
+    case 100:                   /* libguestfs-rewrite. */
+      feature_libguestfs_rewrite = 1;
+      break;
 
-  case MEXP_TIMEOUT:
-    mexp_close (h);
-    set_ssh_error ("timeout waiting virt-v2v --machine-readable output");
-    return -1;
+    case 101:
+      /* input:<driver-name> corresponds to an -i option in virt-v2v. */
+      add_input_driver (&h->buffer[ovector[2]],
+                        (size_t) (ovector[3]-ovector[2]));
+      break;
 
-  case MEXP_ERROR:
-    set_ssh_error ("mexp_expect: %m");
-    mexp_close (h);
-    return -1;
+    case 102:
+      /* output:<driver-name> corresponds to an -o option in virt-v2v. */
+      add_output_driver (&h->buffer[ovector[2]],
+                         (size_t) (ovector[3]-ovector[2]));
+      break;
 
-  case MEXP_PCRE_ERROR:
-    set_ssh_error ("PCRE error: %d\n", h->pcre_error);
-    mexp_close (h);
-    return -1;
+    case 103:                   /* Got prompt, so end of output. */
+      goto end_of_machine_readable;
+
+    case MEXP_EOF:
+      mexp_close (h);
+      set_ssh_error ("unexpected end of file waiting virt-v2v --machine-readable output");
+      return -1;
+
+    case MEXP_TIMEOUT:
+      mexp_close (h);
+      set_ssh_error ("timeout waiting virt-v2v --machine-readable output");
+      return -1;
+
+    case MEXP_ERROR:
+      set_ssh_error ("mexp_expect: %m");
+      mexp_close (h);
+      return -1;
+
+    case MEXP_PCRE_ERROR:
+      set_ssh_error ("PCRE error: %d\n", h->pcre_error);
+      mexp_close (h);
+      return -1;
+    }
   }
+ end_of_machine_readable:
 
   if (!feature_libguestfs_rewrite) {
     mexp_close (h);
@@ -473,6 +515,49 @@ test_connection (struct config *config)
   return 0;
 }
 
+static void
+add_option (const char *type, char ***drivers, const char *name, size_t len)
+{
+  size_t n;
+
+  if (*drivers == NULL)
+    n = 0;
+  else
+    n = guestfs___count_strings (*drivers);
+
+  n++;
+
+  *drivers = realloc (*drivers, (n+1) * sizeof (char *));
+  if (*drivers == NULL) {
+    perror ("malloc");
+    exit (EXIT_FAILURE);
+  }
+
+  (*drivers)[n-1] = strndup (name, len);
+  if ((*drivers)[n-1] == NULL) {
+    perror ("strndup");
+    exit (EXIT_FAILURE);
+  }
+  (*drivers)[n] = NULL;
+
+#if DEBUG_STDERR
+  fprintf (stderr, "%s: remote virt-v2v supports %s driver %s\n",
+           program_name, type, (*drivers)[n-1]);
+#endif
+}
+
+static void
+add_input_driver (const char *name, size_t len)
+{
+  add_option ("input", &input_drivers, name, len);
+}
+
+static void
+add_output_driver (const char *name, size_t len)
+{
+  add_option ("output", &output_drivers, name, len);
+}
+
 /* The p2v ISO should allow us to open up just about any port. */
 static int nbd_local_port = 50123;
 
diff --git a/po/POTFILES-ml b/po/POTFILES-ml
index 9804e7a..53a7bfb 100644
--- a/po/POTFILES-ml
+++ b/po/POTFILES-ml
@@ -92,6 +92,7 @@ v2v/input_libvirt.ml
 v2v/input_libvirtxml.ml
 v2v/lib_esx.ml
 v2v/lib_linux.ml
+v2v/modules_list.ml
 v2v/output_RHEV.ml
 v2v/output_glance.ml
 v2v/output_libvirt.ml
diff --git a/v2v/Makefile.am b/v2v/Makefile.am
index e0f6983..b74325e 100644
--- a/v2v/Makefile.am
+++ b/v2v/Makefile.am
@@ -31,11 +31,12 @@ SOURCES_MLI = \
 	convert_windows.mli \
 	DOM.mli \
 	domainxml.mli \
-	lib_esx.mli \
-	lib_linux.mli \
 	input_disk.mli \
 	input_libvirt.mli \
 	input_libvirtxml.mli \
+	lib_esx.mli \
+	lib_linux.mli \
+	modules_list.mli \
 	output_glance.mli \
 	output_libvirt.mli \
 	output_local.mli \
@@ -52,6 +53,7 @@ SOURCES_ML = \
 	DOM.ml \
 	lib_esx.ml \
 	lib_linux.ml \
+	modules_list.ml \
 	input_disk.ml \
 	input_libvirtxml.ml \
 	input_libvirt.ml \
diff --git a/v2v/TODO b/v2v/TODO
index c7fb6fa..bbc6134 100644
--- a/v2v/TODO
+++ b/v2v/TODO
@@ -14,7 +14,6 @@ p2v:
  - why is the Back button insensitive?
 
 p2v/gui.c:  /* XXX It would be nice not to have to set this explicitly, but
-p2v/gui.c:  /* XXX Add list of input and output drivers to virt-v2v --machine-re
 p2v/main.c:/* XXX Copied from fish/options.c. */
 v2v/convert_linux.ml:           (* Get/construct the version.  XXX Read this fro
 v2v/convert_linux.ml:          [ "sym53c8xx" (* XXX why not "ide"? *) ] in
diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml
index d2378f2..bcf718e 100644
--- a/v2v/cmdline.ml
+++ b/v2v/cmdline.ml
@@ -201,6 +201,8 @@ read the man page virt-v2v(1).
   if args = [] && machine_readable then (
     printf "virt-v2v\n";
     printf "libguestfs-rewrite\n";
+    List.iter (printf "input:%s\n") (Modules_list.input_modules ());
+    List.iter (printf "output:%s\n") (Modules_list.output_modules ());
     exit 0
   );
 
diff --git a/v2v/input_disk.ml b/v2v/input_disk.ml
index 00a7614..aa4d409 100644
--- a/v2v/input_disk.ml
+++ b/v2v/input_disk.ml
@@ -90,3 +90,4 @@ class input_disk verbose input_format disk = object
 end
 
 let input_disk = new input_disk
+let () = Modules_list.register_input_module "disk"
diff --git a/v2v/input_libvirt.ml b/v2v/input_libvirt.ml
index f75df00..b899d59 100644
--- a/v2v/input_libvirt.ml
+++ b/v2v/input_libvirt.ml
@@ -88,3 +88,4 @@ object
 end
 
 let input_libvirt = new input_libvirt
+let () = Modules_list.register_input_module "libvirt"
diff --git a/v2v/input_libvirtxml.ml b/v2v/input_libvirtxml.ml
index 4f9cc15..730ed0a 100644
--- a/v2v/input_libvirtxml.ml
+++ b/v2v/input_libvirtxml.ml
@@ -277,3 +277,4 @@ object
 end
 
 let input_libvirtxml = new input_libvirtxml
+let () = Modules_list.register_input_module "libvirtxml"
diff --git a/v2v/output_local.ml b/v2v/modules_list.ml
similarity index 51%
copy from v2v/output_local.ml
copy to v2v/modules_list.ml
index c6e5992..7fedc77 100644
--- a/v2v/output_local.ml
+++ b/v2v/modules_list.ml
@@ -16,35 +16,13 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *)
 
-open Printf
+let input_modules = ref []
+and output_modules = ref []
 
-open Common_gettext.Gettext
-open Common_utils
+let register_input_module name =
+  input_modules := name :: !input_modules
+and register_output_module name =
+  output_modules := name :: !output_modules
 
-open Types
-open Utils
-
-class output_local verbose dir = object
-  inherit output verbose
-
-  method as_options = sprintf "-o local -os %s" dir
-
-  method prepare_targets source targets =
-    List.map (
-      fun t ->
-        let target_file = dir // source.s_name ^ "-" ^ t.target_overlay.ov_sd in
-        { t with target_file = target_file }
-    ) targets
-
-  method create_metadata source targets guestcaps _ =
-    let doc = Output_libvirt.create_libvirt_xml source targets guestcaps in
-
-    let name = source.s_name in
-    let file = dir // name ^ ".xml" in
-
-    let chan = open_out file in
-    DOM.doc_to_chan chan doc;
-    close_out chan
-end
-
-let output_local = new output_local
+let input_modules () = List.sort compare !input_modules
+and output_modules () = List.sort compare !output_modules
diff --git a/v2v/output_local.ml b/v2v/modules_list.mli
similarity index 51%
copy from v2v/output_local.ml
copy to v2v/modules_list.mli
index c6e5992..805ba8d 100644
--- a/v2v/output_local.ml
+++ b/v2v/modules_list.mli
@@ -16,35 +16,16 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *)
 
-open Printf
+(** List of input and output modules. *)
 
-open Common_gettext.Gettext
-open Common_utils
+val register_input_module : string -> unit
+(** Register an input module by name. *)
 
-open Types
-open Utils
+val register_output_module : string -> unit
+(** Register an output module by name. *)
 
-class output_local verbose dir = object
-  inherit output verbose
+val input_modules : unit -> string list
+(** Return the list of input modules. *)
 
-  method as_options = sprintf "-o local -os %s" dir
-
-  method prepare_targets source targets =
-    List.map (
-      fun t ->
-        let target_file = dir // source.s_name ^ "-" ^ t.target_overlay.ov_sd in
-        { t with target_file = target_file }
-    ) targets
-
-  method create_metadata source targets guestcaps _ =
-    let doc = Output_libvirt.create_libvirt_xml source targets guestcaps in
-
-    let name = source.s_name in
-    let file = dir // name ^ ".xml" in
-
-    let chan = open_out file in
-    DOM.doc_to_chan chan doc;
-    close_out chan
-end
-
-let output_local = new output_local
+val output_modules : unit -> string list
+(** Return the list of output modules. *)
diff --git a/v2v/output_RHEV.ml b/v2v/output_RHEV.ml
index 2e09c77..bfcb0cc 100644
--- a/v2v/output_RHEV.ml
+++ b/v2v/output_RHEV.ml
@@ -720,3 +720,4 @@ object
 end
 
 let output_rhev = new output_rhev
+let () = Modules_list.register_output_module "rhev"
diff --git a/v2v/output_glance.ml b/v2v/output_glance.ml
index f858f91..936f1d5 100644
--- a/v2v/output_glance.ml
+++ b/v2v/output_glance.ml
@@ -126,3 +126,4 @@ object
 end
 
 let output_glance = new output_glance
+let () = Modules_list.register_output_module "glance"
diff --git a/v2v/output_libvirt.ml b/v2v/output_libvirt.ml
index 5621c0b..927beba 100644
--- a/v2v/output_libvirt.ml
+++ b/v2v/output_libvirt.ml
@@ -275,3 +275,4 @@ class output_libvirt verbose oc output_pool = object
 end
 
 let output_libvirt = new output_libvirt
+let () = Modules_list.register_output_module "libvirt"
diff --git a/v2v/output_local.ml b/v2v/output_local.ml
index c6e5992..db36f0e 100644
--- a/v2v/output_local.ml
+++ b/v2v/output_local.ml
@@ -48,3 +48,4 @@ class output_local verbose dir = object
 end
 
 let output_local = new output_local
+let () = Modules_list.register_output_module "local"

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-libvirt/libguestfs.git



More information about the Pkg-libvirt-commits mailing list