Pino Toscano
2020-May-25 14:57 UTC
[Libguestfs] [v2v PATCH] -i libvirt: print URI without connecting
Pass (again) around the libvirt URI string in the various input_libvirt subclasses so that input_libvirt#as_options does not need to connect to print the connection URI. As related change: pass input_conn as non-optional string parameter in classes that require one (all but input_libvirt_other, basically). This avoids the need for extra checks. --- v2v/input_libvirt.ml | 10 +++++----- v2v/input_libvirt_other.ml | 12 ++++++++---- v2v/input_libvirt_other.mli | 4 ++-- v2v/input_libvirt_vcenter_https.ml | 4 ++-- v2v/input_libvirt_vcenter_https.mli | 2 +- v2v/input_libvirt_vddk.ml | 9 ++------- v2v/input_libvirt_vddk.mli | 4 ++-- v2v/input_libvirt_xen_ssh.ml | 4 ++-- v2v/input_libvirt_xen_ssh.mli | 2 +- 9 files changed, 25 insertions(+), 26 deletions(-) diff --git a/v2v/input_libvirt.ml b/v2v/input_libvirt.ml index cd5f351c..352fae94 100644 --- a/v2v/input_libvirt.ml +++ b/v2v/input_libvirt.ml @@ -53,22 +53,22 @@ let input_libvirt input_conn input_password input_transport guest | Some _, None, _ (* No scheme? *) | Some _, Some "", _ -> - Input_libvirt_other.input_libvirt_other libvirt_conn guest + Input_libvirt_other.input_libvirt_other libvirt_conn ?input_conn guest (* vCenter over https. *) | Some server, Some ("esx"|"gsx"|"vpx"), None -> Input_libvirt_vcenter_https.input_libvirt_vcenter_https - libvirt_conn input_password parsed_uri server guest + libvirt_conn orig_uri input_password parsed_uri server guest (* vCenter or ESXi using nbdkit vddk plugin *) | Some server, Some ("esx"|"gsx"|"vpx"), Some (`VDDK vddk_options) -> Input_libvirt_vddk.input_libvirt_vddk - libvirt_conn input_conn input_password vddk_options parsed_uri guest + libvirt_conn orig_uri input_password vddk_options parsed_uri guest (* Xen over SSH *) | Some server, Some "xen+ssh", _ -> Input_libvirt_xen_ssh.input_libvirt_xen_ssh - libvirt_conn input_password parsed_uri server guest + libvirt_conn orig_uri input_password parsed_uri server guest (* Old virt-v2v also supported qemu+ssh://. However I am * deliberately not supporting this in new virt-v2v. Don't @@ -79,6 +79,6 @@ let input_libvirt input_conn input_password input_transport guest | Some _, Some _, _ -> warning (f_"no support for remote libvirt connections to '-ic %s'. The conversion may fail when it tries to read the source disks.") orig_uri; - Input_libvirt_other.input_libvirt_other libvirt_conn guest + Input_libvirt_other.input_libvirt_other libvirt_conn ?input_conn guest let () = Modules_list.register_input_module "libvirt" diff --git a/v2v/input_libvirt_other.ml b/v2v/input_libvirt_other.ml index e00944db..6a19ae52 100644 --- a/v2v/input_libvirt_other.ml +++ b/v2v/input_libvirt_other.ml @@ -40,12 +40,16 @@ let error_if_libvirt_does_not_support_json_backingfile () error (f_"because of libvirt bug https://bugzilla.redhat.com/1134878 you must EITHER upgrade to libvirt >= 2.1.0 OR set this environment variable:\n\nexport LIBGUESTFS_BACKEND=direct\n\nand then rerun the virt-v2v command.") (* Superclass. *) -class virtual input_libvirt libvirt_conn guest +class virtual input_libvirt libvirt_conn ?input_conn guest object (self) inherit input method as_options - sprintf "-i libvirt -ic %s %s" (Libvirt.Connect.get_uri self#conn) guest + sprintf "-i libvirt%s %s" + (match input_conn with + | None -> "" + | Some uri -> " -ic " ^ uri) + guest method private conn : Libvirt.rw Libvirt.Connect.t Lazy.force libvirt_conn @@ -54,9 +58,9 @@ end (* Subclass specialized for handling anything that's *not* VMware vCenter * or Xen. *) -class input_libvirt_other libvirt_conn guest +class input_libvirt_other libvirt_conn ?input_conn guest object (self) - inherit input_libvirt libvirt_conn guest + inherit input_libvirt libvirt_conn ?input_conn guest method source ?bandwidth () debug "input_libvirt_other: source ()"; diff --git a/v2v/input_libvirt_other.mli b/v2v/input_libvirt_other.mli index c528c3ee..ae2c0c6d 100644 --- a/v2v/input_libvirt_other.mli +++ b/v2v/input_libvirt_other.mli @@ -20,11 +20,11 @@ val error_if_libvirt_does_not_support_json_backingfile : unit -> unit -class virtual input_libvirt : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> object +class virtual input_libvirt : Libvirt.rw Libvirt.Connect.t Lazy.t -> ?input_conn:string -> string -> object method precheck : unit -> unit method as_options : string method virtual source : ?bandwidth:Types.bandwidth -> unit -> Types.source * Types.source_disk list method private conn : Libvirt.rw Libvirt.Connect.t end -val input_libvirt_other : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> Types.input +val input_libvirt_other : Libvirt.rw Libvirt.Connect.t Lazy.t -> ?input_conn:string -> string -> Types.input diff --git a/v2v/input_libvirt_vcenter_https.ml b/v2v/input_libvirt_vcenter_https.ml index 77bc315d..ed2e5eed 100644 --- a/v2v/input_libvirt_vcenter_https.ml +++ b/v2v/input_libvirt_vcenter_https.ml @@ -32,9 +32,9 @@ open Printf (* Subclass specialized for handling VMware vCenter over https. *) class input_libvirt_vcenter_https - libvirt_conn input_password parsed_uri server guest + libvirt_conn input_conn input_password parsed_uri server guest object (self) - inherit input_libvirt libvirt_conn guest + inherit input_libvirt libvirt_conn ~input_conn guest val mutable dcPath = "" diff --git a/v2v/input_libvirt_vcenter_https.mli b/v2v/input_libvirt_vcenter_https.mli index c2e0f3fe..a12a9815 100644 --- a/v2v/input_libvirt_vcenter_https.mli +++ b/v2v/input_libvirt_vcenter_https.mli @@ -18,4 +18,4 @@ (** [-i libvirt] when the source is VMware vCenter *) -val input_libvirt_vcenter_https : Libvirt.rw Libvirt.Connect.t Lazy.t -> string option -> Xml.uri -> string -> string -> Types.input +val input_libvirt_vcenter_https : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> string option -> Xml.uri -> string -> string -> Types.input diff --git a/v2v/input_libvirt_vddk.ml b/v2v/input_libvirt_vddk.ml index fbd1e0c6..75fd146e 100644 --- a/v2v/input_libvirt_vddk.ml +++ b/v2v/input_libvirt_vddk.ml @@ -99,7 +99,7 @@ class input_libvirt_vddk libvirt_conn input_conn input_password vddk_options in object (self) - inherit input_libvirt libvirt_conn guest as super + inherit input_libvirt libvirt_conn ~input_conn guest as super method precheck () error_unless_thumbprint () @@ -138,12 +138,7 @@ object (self) match parsed_uri.Xml.uri_server with | Some server -> server | None -> - match input_conn with - | Some input_conn -> - error (f_"‘-ic %s’ URL does not contain a host name field") - input_conn - | None -> - error (f_"you must use the ‘-ic’ parameter. See the virt-v2v-input-vmware(1) manual.") in + error (f_"‘-ic %s’ URL does not contain a host name field") input_conn in let user = parsed_uri.Xml.uri_user in diff --git a/v2v/input_libvirt_vddk.mli b/v2v/input_libvirt_vddk.mli index 2fc6e9cf..f37d88e7 100644 --- a/v2v/input_libvirt_vddk.mli +++ b/v2v/input_libvirt_vddk.mli @@ -25,7 +25,7 @@ val print_input_options : unit -> unit val parse_input_options : (string * string) list -> vddk_options (** Print and parse vddk -io options. *) -val input_libvirt_vddk : Libvirt.rw Libvirt.Connect.t Lazy.t -> string option -> string option -> vddk_options -> Xml.uri -> string -> Types.input -(** [input_libvirt_vddk libvirt_conn vddk_options parsed_uri guest] +val input_libvirt_vddk : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> string option -> vddk_options -> Xml.uri -> string -> Types.input +(** [input_libvirt_vddk libvirt_conn input_conn vddk_options parsed_uri guest] creates and returns a {!Types.input} object specialized for reading the guest disks using the nbdkit vddk plugin. *) diff --git a/v2v/input_libvirt_xen_ssh.ml b/v2v/input_libvirt_xen_ssh.ml index bd1235a6..ec366b4a 100644 --- a/v2v/input_libvirt_xen_ssh.ml +++ b/v2v/input_libvirt_xen_ssh.ml @@ -30,9 +30,9 @@ open Input_libvirt_other open Printf (* Subclass specialized for handling Xen over SSH. *) -class input_libvirt_xen_ssh libvirt_conn input_password parsed_uri server guest +class input_libvirt_xen_ssh libvirt_conn input_conn input_password parsed_uri server guest object (self) - inherit input_libvirt libvirt_conn guest + inherit input_libvirt libvirt_conn ~input_conn guest method precheck () if backend_is_libvirt () then diff --git a/v2v/input_libvirt_xen_ssh.mli b/v2v/input_libvirt_xen_ssh.mli index 120a52f7..3cbca9d7 100644 --- a/v2v/input_libvirt_xen_ssh.mli +++ b/v2v/input_libvirt_xen_ssh.mli @@ -18,4 +18,4 @@ (** [-i libvirt] when the source is Xen *) -val input_libvirt_xen_ssh : Libvirt.rw Libvirt.Connect.t Lazy.t -> string option -> Xml.uri -> string -> string -> Types.input +val input_libvirt_xen_ssh : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> string option -> Xml.uri -> string -> string -> Types.input -- 2.25.4
Richard W.M. Jones
2020-May-26 09:19 UTC
Re: [Libguestfs] [v2v PATCH] -i libvirt: print URI without connecting
On Mon, May 25, 2020 at 04:57:16PM +0200, Pino Toscano wrote:> Pass (again) around the libvirt URI string in the various input_libvirt > subclasses so that input_libvirt#as_options does not need to connect to > print the connection URI. > > As related change: pass input_conn as non-optional string parameter in > classes that require one (all but input_libvirt_other, basically). This > avoids the need for extra checks.It's a bit of a silly bug IMO, but sure: ACK Rich> --- > v2v/input_libvirt.ml | 10 +++++----- > v2v/input_libvirt_other.ml | 12 ++++++++---- > v2v/input_libvirt_other.mli | 4 ++-- > v2v/input_libvirt_vcenter_https.ml | 4 ++-- > v2v/input_libvirt_vcenter_https.mli | 2 +- > v2v/input_libvirt_vddk.ml | 9 ++------- > v2v/input_libvirt_vddk.mli | 4 ++-- > v2v/input_libvirt_xen_ssh.ml | 4 ++-- > v2v/input_libvirt_xen_ssh.mli | 2 +- > 9 files changed, 25 insertions(+), 26 deletions(-) > > diff --git a/v2v/input_libvirt.ml b/v2v/input_libvirt.ml > index cd5f351c..352fae94 100644 > --- a/v2v/input_libvirt.ml > +++ b/v2v/input_libvirt.ml > @@ -53,22 +53,22 @@ let input_libvirt input_conn input_password input_transport guest > > | Some _, None, _ (* No scheme? *) > | Some _, Some "", _ -> > - Input_libvirt_other.input_libvirt_other libvirt_conn guest > + Input_libvirt_other.input_libvirt_other libvirt_conn ?input_conn guest > > (* vCenter over https. *) > | Some server, Some ("esx"|"gsx"|"vpx"), None -> > Input_libvirt_vcenter_https.input_libvirt_vcenter_https > - libvirt_conn input_password parsed_uri server guest > + libvirt_conn orig_uri input_password parsed_uri server guest > > (* vCenter or ESXi using nbdkit vddk plugin *) > | Some server, Some ("esx"|"gsx"|"vpx"), Some (`VDDK vddk_options) -> > Input_libvirt_vddk.input_libvirt_vddk > - libvirt_conn input_conn input_password vddk_options parsed_uri guest > + libvirt_conn orig_uri input_password vddk_options parsed_uri guest > > (* Xen over SSH *) > | Some server, Some "xen+ssh", _ -> > Input_libvirt_xen_ssh.input_libvirt_xen_ssh > - libvirt_conn input_password parsed_uri server guest > + libvirt_conn orig_uri input_password parsed_uri server guest > > (* Old virt-v2v also supported qemu+ssh://. However I am > * deliberately not supporting this in new virt-v2v. Don't > @@ -79,6 +79,6 @@ let input_libvirt input_conn input_password input_transport guest > | Some _, Some _, _ -> > warning (f_"no support for remote libvirt connections to '-ic %s'. The conversion may fail when it tries to read the source disks.") > orig_uri; > - Input_libvirt_other.input_libvirt_other libvirt_conn guest > + Input_libvirt_other.input_libvirt_other libvirt_conn ?input_conn guest > > let () = Modules_list.register_input_module "libvirt" > diff --git a/v2v/input_libvirt_other.ml b/v2v/input_libvirt_other.ml > index e00944db..6a19ae52 100644 > --- a/v2v/input_libvirt_other.ml > +++ b/v2v/input_libvirt_other.ml > @@ -40,12 +40,16 @@ let error_if_libvirt_does_not_support_json_backingfile () > error (f_"because of libvirt bug https://bugzilla.redhat.com/1134878 you must EITHER upgrade to libvirt >= 2.1.0 OR set this environment variable:\n\nexport LIBGUESTFS_BACKEND=direct\n\nand then rerun the virt-v2v command.") > > (* Superclass. *) > -class virtual input_libvirt libvirt_conn guest > +class virtual input_libvirt libvirt_conn ?input_conn guest > object (self) > inherit input > > method as_options > - sprintf "-i libvirt -ic %s %s" (Libvirt.Connect.get_uri self#conn) guest > + sprintf "-i libvirt%s %s" > + (match input_conn with > + | None -> "" > + | Some uri -> " -ic " ^ uri) > + guest > > method private conn : Libvirt.rw Libvirt.Connect.t > Lazy.force libvirt_conn > @@ -54,9 +58,9 @@ end > (* Subclass specialized for handling anything that's *not* VMware vCenter > * or Xen. > *) > -class input_libvirt_other libvirt_conn guest > +class input_libvirt_other libvirt_conn ?input_conn guest > object (self) > - inherit input_libvirt libvirt_conn guest > + inherit input_libvirt libvirt_conn ?input_conn guest > > method source ?bandwidth () > debug "input_libvirt_other: source ()"; > diff --git a/v2v/input_libvirt_other.mli b/v2v/input_libvirt_other.mli > index c528c3ee..ae2c0c6d 100644 > --- a/v2v/input_libvirt_other.mli > +++ b/v2v/input_libvirt_other.mli > @@ -20,11 +20,11 @@ > > val error_if_libvirt_does_not_support_json_backingfile : unit -> unit > > -class virtual input_libvirt : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> object > +class virtual input_libvirt : Libvirt.rw Libvirt.Connect.t Lazy.t -> ?input_conn:string -> string -> object > method precheck : unit -> unit > method as_options : string > method virtual source : ?bandwidth:Types.bandwidth -> unit -> Types.source * Types.source_disk list > method private conn : Libvirt.rw Libvirt.Connect.t > end > > -val input_libvirt_other : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> Types.input > +val input_libvirt_other : Libvirt.rw Libvirt.Connect.t Lazy.t -> ?input_conn:string -> string -> Types.input > diff --git a/v2v/input_libvirt_vcenter_https.ml b/v2v/input_libvirt_vcenter_https.ml > index 77bc315d..ed2e5eed 100644 > --- a/v2v/input_libvirt_vcenter_https.ml > +++ b/v2v/input_libvirt_vcenter_https.ml > @@ -32,9 +32,9 @@ open Printf > > (* Subclass specialized for handling VMware vCenter over https. *) > class input_libvirt_vcenter_https > - libvirt_conn input_password parsed_uri server guest > + libvirt_conn input_conn input_password parsed_uri server guest > object (self) > - inherit input_libvirt libvirt_conn guest > + inherit input_libvirt libvirt_conn ~input_conn guest > > val mutable dcPath = "" > > diff --git a/v2v/input_libvirt_vcenter_https.mli b/v2v/input_libvirt_vcenter_https.mli > index c2e0f3fe..a12a9815 100644 > --- a/v2v/input_libvirt_vcenter_https.mli > +++ b/v2v/input_libvirt_vcenter_https.mli > @@ -18,4 +18,4 @@ > > (** [-i libvirt] when the source is VMware vCenter *) > > -val input_libvirt_vcenter_https : Libvirt.rw Libvirt.Connect.t Lazy.t -> string option -> Xml.uri -> string -> string -> Types.input > +val input_libvirt_vcenter_https : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> string option -> Xml.uri -> string -> string -> Types.input > diff --git a/v2v/input_libvirt_vddk.ml b/v2v/input_libvirt_vddk.ml > index fbd1e0c6..75fd146e 100644 > --- a/v2v/input_libvirt_vddk.ml > +++ b/v2v/input_libvirt_vddk.ml > @@ -99,7 +99,7 @@ class input_libvirt_vddk libvirt_conn input_conn input_password vddk_options > in > > object (self) > - inherit input_libvirt libvirt_conn guest as super > + inherit input_libvirt libvirt_conn ~input_conn guest as super > > method precheck () > error_unless_thumbprint () > @@ -138,12 +138,7 @@ object (self) > match parsed_uri.Xml.uri_server with > | Some server -> server > | None -> > - match input_conn with > - | Some input_conn -> > - error (f_"‘-ic %s’ URL does not contain a host name field") > - input_conn > - | None -> > - error (f_"you must use the ‘-ic’ parameter. See the virt-v2v-input-vmware(1) manual.") in > + error (f_"‘-ic %s’ URL does not contain a host name field") input_conn in > > let user = parsed_uri.Xml.uri_user in > > diff --git a/v2v/input_libvirt_vddk.mli b/v2v/input_libvirt_vddk.mli > index 2fc6e9cf..f37d88e7 100644 > --- a/v2v/input_libvirt_vddk.mli > +++ b/v2v/input_libvirt_vddk.mli > @@ -25,7 +25,7 @@ val print_input_options : unit -> unit > val parse_input_options : (string * string) list -> vddk_options > (** Print and parse vddk -io options. *) > > -val input_libvirt_vddk : Libvirt.rw Libvirt.Connect.t Lazy.t -> string option -> string option -> vddk_options -> Xml.uri -> string -> Types.input > -(** [input_libvirt_vddk libvirt_conn vddk_options parsed_uri guest] > +val input_libvirt_vddk : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> string option -> vddk_options -> Xml.uri -> string -> Types.input > +(** [input_libvirt_vddk libvirt_conn input_conn vddk_options parsed_uri guest] > creates and returns a {!Types.input} object specialized for reading > the guest disks using the nbdkit vddk plugin. *) > diff --git a/v2v/input_libvirt_xen_ssh.ml b/v2v/input_libvirt_xen_ssh.ml > index bd1235a6..ec366b4a 100644 > --- a/v2v/input_libvirt_xen_ssh.ml > +++ b/v2v/input_libvirt_xen_ssh.ml > @@ -30,9 +30,9 @@ open Input_libvirt_other > open Printf > > (* Subclass specialized for handling Xen over SSH. *) > -class input_libvirt_xen_ssh libvirt_conn input_password parsed_uri server guest > +class input_libvirt_xen_ssh libvirt_conn input_conn input_password parsed_uri server guest > object (self) > - inherit input_libvirt libvirt_conn guest > + inherit input_libvirt libvirt_conn ~input_conn guest > > method precheck () > if backend_is_libvirt () then > diff --git a/v2v/input_libvirt_xen_ssh.mli b/v2v/input_libvirt_xen_ssh.mli > index 120a52f7..3cbca9d7 100644 > --- a/v2v/input_libvirt_xen_ssh.mli > +++ b/v2v/input_libvirt_xen_ssh.mli > @@ -18,4 +18,4 @@ > > (** [-i libvirt] when the source is Xen *) > > -val input_libvirt_xen_ssh : Libvirt.rw Libvirt.Connect.t Lazy.t -> string option -> Xml.uri -> string -> string -> Types.input > +val input_libvirt_xen_ssh : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> string option -> Xml.uri -> string -> string -> Types.input > -- > 2.25.4 > > _______________________________________________ > Libguestfs mailing list > Libguestfs@redhat.com > https://www.redhat.com/mailman/listinfo/libguestfs-- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-top is 'top' for virtual machines. Tiny program with many powerful monitoring features, net stats, disk stats, logging, etc. http://people.redhat.com/~rjones/virt-top
Seemingly Similar Threads
- [PATCH v4 3/7] v2v: switch to ocaml-libvirt
- [PATCH] RFC: v2v: add and use libvirt connection objects
- [PATCH v2 1/2] v2v: vddk: Switch to using ‘-it vddk’ to specify VDDK as input transport.
- [PATCH 1/5] v2v: Remove --dcpath parameter and related functionality.
- [v2v PATCH] vCenter: require curl in #precheck