Pino Toscano
2016-Sep-15 11:49 UTC
[Libguestfs] [PATCH] v2v: -o libvirt: always write pool names (RHBZ#1141631)
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
Richard W.M. Jones
2016-Sep-15 12:20 UTC
Re: [Libguestfs] [PATCH] v2v: -o libvirt: always write pool names (RHBZ#1141631)
On Thu, Sep 15, 2016 at 01:49:00PM +0200, Pino Toscano wrote:> 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" inLooks good, ACK. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW
Possibly Parallel Threads
- [PATCH] v2v: Add support for libosinfo metadata
- [PATCH] v2v: -o libvirt: Get the <features/> right in the output XML (RHBZ#1159258).
- [v2v PATCH] -o libvirt: read pool name from object
- [PATCH v4 4/7] v2v: -o libvirt: use a Lazy for the connection
- Re: [PATCH] v2v: Add support for libosinfo metadata