Richard W.M. Jones
2016-Sep-21 13:03 UTC
[Libguestfs] [PATCH] v2v: Support <listen type='socket'> and <listen type='none'> (RHBZ#1378022).
Since libvirt 2.0.0, these two new <listen/> types have been supported: https://libvirt.org/formatdomain.html#elementsGraphics This change just copies that configuration over from the source to the destination if the destination is also libvirt. Since we previously used 'LNone' to mean "no parseable <listen/> element" I also had to change previous uses of 'LNone' to 'LNoListen', so we can use 'LNone' to mean "<listen type='none'>". Thanks: Ming Xie. --- v2v/input_disk.ml | 2 +- v2v/input_libvirtxml.ml | 17 ++++++++++++----- v2v/output_libvirt.ml | 9 ++++++++- v2v/types.ml | 8 ++++++-- v2v/types.mli | 4 +++- 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/v2v/input_disk.ml b/v2v/input_disk.ml index e07222f..2852ce9 100644 --- a/v2v/input_disk.ml +++ b/v2v/input_disk.ml @@ -84,7 +84,7 @@ class input_disk input_format disk = object s_firmware = UnknownFirmware; (* causes virt-v2v to autodetect *) s_display Some { s_display_type = Window; s_keymap = None; s_password = None; - s_listen = LNone; s_port = None }; + s_listen = LNoListen; s_port = None }; s_video = None; s_sound = None; s_disks = [disk]; diff --git a/v2v/input_libvirtxml.ml b/v2v/input_libvirtxml.ml index 33e878e..d94591f 100644 --- a/v2v/input_libvirtxml.ml +++ b/v2v/input_libvirtxml.ml @@ -96,24 +96,31 @@ let parse_libvirt_xml ?conn xml let nr_nodes = Xml.xpathobj_nr_nodes obj in if nr_nodes < 1 then ( match xpath_string "@listen" with - | None -> LNone | Some a -> LAddress a + | None -> LNoListen | Some a -> LAddress a ) else ( (* Use only the first <listen> configuration. *) match xpath_string "listen[1]/@type" with - | None -> LNone + | None -> LNoListen | Some "address" -> (match xpath_string "listen[1]/@address" with - | None -> LNone + | None -> LNoListen | Some a -> LAddress a ) | Some "network" -> (match xpath_string "listen[1]/@network" with - | None -> LNone + | None -> LNoListen | Some n -> LNetwork n ) + | Some "socket" -> + (match xpath_string "listen[1]/@socket" with + | None -> LNoListen + | Some n -> LSocket n + ) + | Some "none" -> + LNone | Some t -> warning (f_"<listen type='%s'> in the input libvirt XML was ignored") t; - LNone + LNoListen ) in let port match xpath_string "@autoport" with diff --git a/v2v/output_libvirt.ml b/v2v/output_libvirt.ml index e934335..ac91922 100644 --- a/v2v/output_libvirt.ml +++ b/v2v/output_libvirt.ml @@ -281,13 +281,20 @@ let create_libvirt_xml ?pool source target_buses guestcaps (match source.s_display with | Some { s_listen = listen } -> (match listen with + | LNoListen -> () | LAddress a -> let sub = e "listen" [ "type", "address"; "address", a ] [] in append_child sub graphics | LNetwork n -> let sub = e "listen" [ "type", "network"; "network", n ] [] in append_child sub graphics - | LNone -> ()) + | LSocket s -> + let sub = e "listen" [ "type", "socket"; "socket", s ] [] in + append_child sub graphics + | LNone -> + let sub = e "listen" [ "type", "none" ] [] in + append_child sub graphics + ) | None -> ()); (match source.s_display with | Some { s_port = Some p } -> diff --git a/v2v/types.ml b/v2v/types.ml index c43db24..bf4365c 100644 --- a/v2v/types.ml +++ b/v2v/types.ml @@ -82,9 +82,11 @@ and source_display = { } and s_display_type = Window | VNC | Spice and s_display_listen - | LNone + | LNoListen | LAddress of string | LNetwork of string + | LSocket of string + | LNone and source_video = Source_other_video of string | Source_Cirrus | Source_QXL @@ -227,9 +229,11 @@ and string_of_source_display { s_display_type = typ; (match keymap with None -> "" | Some km -> " " ^ km) (match password with None -> "" | Some _ -> " with password") (match listen with - | LNone -> "" + | LNoListen -> "" | LAddress a -> sprintf " listening on address %s" a | LNetwork n -> sprintf " listening on network %s" n + | LSocket s -> sprintf " listening on Unix domain socket %s" s + | LNone -> " listening on private fd" ) and string_of_source_video = function diff --git a/v2v/types.mli b/v2v/types.mli index 2727383..514565c 100644 --- a/v2v/types.mli +++ b/v2v/types.mli @@ -139,9 +139,11 @@ and source_display = { } and s_display_type = Window | VNC | Spice and s_display_listen - | LNone + | LNoListen (** No parseable <listen/> element. *) | LAddress of string (** Listen address. *) | LNetwork of string (** Listen network. *) + | LSocket of string (** Listen Unix domain socket. *) + | LNone (** <listen type='none'> *) (** Video adapter model. *) and source_video = Source_other_video of string | -- 2.9.3
Pino Toscano
2016-Sep-21 13:17 UTC
Re: [Libguestfs] [PATCH] v2v: Support <listen type='socket'> and <listen type='none'> (RHBZ#1378022).
On Wednesday, 21 September 2016 14:03:43 CEST Richard W.M. Jones wrote:> Since libvirt 2.0.0, these two new <listen/> types have been > supported: https://libvirt.org/formatdomain.html#elementsGraphics > > This change just copies that configuration over from the source to the > destination if the destination is also libvirt. > > Since we previously used 'LNone' to mean "no parseable <listen/> > element" I also had to change previous uses of 'LNone' to 'LNoListen', > so we can use 'LNone' to mean "<listen type='none'>". > > Thanks: Ming Xie. > ---LGTM. -- Pino Toscano
Apparently Analagous Threads
- [PATCH] v2v: support no socket for <listen type='socket'>
- [PATCH 1/2] v2v: -o libvirt: Refactor video and graphics elements.
- [PATCH 1/4] v2v: collect source network and video adapter types
- [PATCH v4 1/5] v2v: collect source network and video adapter types
- [PATCH v2 1/4] v2v: collect source network and video adapter types