[Libguestfs] [PATCH] v2v: convert libvirt display port configuration

Richard W.M. Jones rjones at redhat.com
Tue Apr 14 16:08:41 UTC 2015


On Tue, Apr 14, 2015 at 01:24:54PM +0200, Pino Toscano wrote:
> Read the port configuration from the XML of libvirt domains, restoring
> it when writing new libvirt XMLs instead of always setting the
> "autoport" option.
> ---
>  v2v/input_disk.ml       |  2 +-
>  v2v/input_libvirtxml.ml | 13 +++++++++++--
>  v2v/output_libvirt.ml   |  8 +++++++-
>  v2v/output_qemu.ml      |  3 ++-
>  v2v/types.ml            |  1 +
>  v2v/types.mli           |  1 +
>  6 files changed, 23 insertions(+), 5 deletions(-)
> 
> diff --git a/v2v/input_disk.ml b/v2v/input_disk.ml
> index 2c70368..40bd783 100644
> --- a/v2v/input_disk.ml
> +++ b/v2v/input_disk.ml
> @@ -87,7 +87,7 @@ class input_disk verbose input_format disk = object
>        s_features = [ "acpi"; "apic"; "pae" ];
>        s_display =
>          Some { s_display_type = Window; s_keymap = None; s_password = None;
> -               s_listen = LNone };
> +               s_listen = LNone; s_port = None };
>        s_disks = [disk];
>        s_removables = [];
>        s_nics = [network];
> diff --git a/v2v/input_libvirtxml.ml b/v2v/input_libvirtxml.ml
> index 4fb6358..2e8fa1f 100644
> --- a/v2v/input_libvirtxml.ml
> +++ b/v2v/input_libvirtxml.ml
> @@ -117,14 +117,23 @@ let parse_libvirt_xml ~verbose xml =
>              warning (f_"<listen type='%s'> in the input libvirt XML was ignored") t;
>              LNone
>          ) in
> +      let port =
> +        match xpath_to_string "@autoport" "yes" with
> +        | "no" ->
> +          let port = xpath_to_int "@port" (-1) in
> +          if port >= 0 then Some port
> +          else None
> +        | _ -> None in
>        match xpath_to_string "@type" "" with
>        | "" -> None
>        | "vnc" ->
>          Some { s_display_type = VNC;
> -               s_keymap = keymap; s_password = password; s_listen = listen }
> +               s_keymap = keymap; s_password = password; s_listen = listen;
> +               s_port = port }
>        | "spice" ->
>          Some { s_display_type = Spice;
> -               s_keymap = keymap; s_password = password; s_listen = listen }
> +               s_keymap = keymap; s_password = password; s_listen = listen;
> +               s_port = port }
>        | "sdl"|"desktop" as t ->
>          warning (f_"virt-v2v does not support local displays, so <graphics type='%s'> in the input libvirt XML was ignored") t;
>          None
> diff --git a/v2v/output_libvirt.ml b/v2v/output_libvirt.ml
> index 64dc2dc..fc083d3 100644
> --- a/v2v/output_libvirt.ml
> +++ b/v2v/output_libvirt.ml
> @@ -222,7 +222,6 @@ let create_libvirt_xml ?pool source targets guestcaps target_features =
>  
>      append_attr ("heads", "1") video;
>  
> -    append_attr ("autoport", "yes") graphics;
>      (match source.s_display with
>      | Some { s_keymap = Some km } -> append_attr ("keymap", km) graphics
>      | _ -> ());
> @@ -240,6 +239,13 @@ let create_libvirt_xml ?pool source targets guestcaps target_features =
>          append_child sub graphics
>        | LNone -> ())
>      | _ -> ());
> +    (match source.s_display with
> +    | Some { s_port = Some p } ->
> +      append_attr ("autoport", "no") graphics;
> +      append_attr ("port", string_of_int p) graphics
> +    | _ ->
> +      append_attr ("autoport", "yes") graphics;
> +      append_attr ("port", "-1") graphics);
>  
>      video, graphics in
>  
> diff --git a/v2v/output_qemu.ml b/v2v/output_qemu.ml
> index c3f64d1..d9a10b1 100644
> --- a/v2v/output_qemu.ml
> +++ b/v2v/output_qemu.ml
> @@ -95,7 +95,8 @@ object
>        | VNC ->
>          fpf "%s-display vnc=:0" nl
>        | Spice ->
> -        fpf "%s-spice port=5900,addr=127.0.0.1" nl
> +        fpf "%s-spice port=%d,addr=127.0.0.1" nl
> +        (match display.s_port with None -> 5900 | Some p -> p)
>        );
>        fpf "%s-vga %s" nl
>          (match guestcaps.gcaps_video with Cirrus -> "cirrus" | QXL -> "qxl")
> diff --git a/v2v/types.ml b/v2v/types.ml
> index 9e4fa35..633fe3f 100644
> --- a/v2v/types.ml
> +++ b/v2v/types.ml
> @@ -63,6 +63,7 @@ and source_display = {
>    s_keymap : string option;
>    s_password : string option;
>    s_listen : s_display_listen;
> +  s_port : int option;
>  }
>  and s_display_type = Window | VNC | Spice
>  and s_display_listen =
> diff --git a/v2v/types.mli b/v2v/types.mli
> index a3c1fd4..a1ec4ba 100644
> --- a/v2v/types.mli
> +++ b/v2v/types.mli
> @@ -83,6 +83,7 @@ and source_display = {
>    s_password : string option;      (** If required, password to access
>                                         the display. *)
>    s_listen : s_display_listen;     (** Listen address. *)
> +  s_port : int option;             (** Display port. *)
>  }
>  and s_display_type = Window | VNC | Spice
>  and s_display_listen =

All looks sensible to me, ACK.

Thanks, Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-p2v converts physical machines to virtual machines.  Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v




More information about the Libguestfs mailing list