[Libguestfs] [PATCH] v2v: -o libvirt: always write pool names (RHBZ#1141631)

Pino Toscano ptoscano at redhat.com
Thu Sep 15 11:49:00 UTC 2016


When creating the XML for the new guest, always put the name of the pool
containing the disks, even when -os specified a pool UUID: libvirt does
not handle pool UUIDs for storage, but only names.
---
 v2v/output_libvirt.ml | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/v2v/output_libvirt.ml b/v2v/output_libvirt.ml
index 5fa338f..e934335 100644
--- a/v2v/output_libvirt.ml
+++ b/v2v/output_libvirt.ml
@@ -340,6 +340,7 @@ class output_libvirt oc output_pool = object
   inherit output
 
   val mutable capabilities_doc = None
+  val mutable pool_name = None
 
   method as_options =
     match oc with
@@ -392,6 +393,15 @@ class output_libvirt oc output_pool = object
       | Some dir when not (is_directory dir) ->
          error (f_"-o libvirt: output pool '%s' has type='dir' but the /pool/target/path element is not a local directory.  See virt-v2v(1) section \"OUTPUT TO LIBVIRT\"") output_pool
       | Some dir -> dir in
+    (* Get the name of the pool, since we have to use that
+     * (and not the UUID) in the XML of the guest.
+     *)
+    let name =
+      match xpath_string "/pool/name/text()" with
+      | None ->
+         error (f_"-o libvirt: output pool '%s' does not have /pool/name element.  See virt-v2v(1) section \"OUTPUT TO LIBVIRT\"") output_pool
+      | Some name -> name in
+    pool_name <- Some name;
 
     (* Set up the targets. *)
     List.map (
@@ -426,6 +436,11 @@ class output_libvirt oc output_pool = object
     if run_command cmd <> 0 then
       warning (f_"could not refresh libvirt pool %s") output_pool;
 
+    let pool_name =
+      match pool_name with
+      | None -> output_pool
+      | Some n -> n in
+
     (* Parse the capabilities XML in order to get the supported features. *)
     let doc =
       match capabilities_doc with
@@ -436,7 +451,7 @@ class output_libvirt oc output_pool = object
 
     (* Create the metadata. *)
     let doc =
-      create_libvirt_xml ~pool:output_pool source target_buses
+      create_libvirt_xml ~pool:pool_name source target_buses
         guestcaps target_features target_firmware in
 
     let tmpfile, chan = Filename.open_temp_file "v2vlibvirt" ".xml" in
-- 
2.7.4




More information about the Libguestfs mailing list