[Libguestfs] [v2v PATCH 0/9] generate virtio-transitional devices if told so by libosinfo

Laszlo Ersek lersek at redhat.com
Fri Jan 7 11:43:10 UTC 2022


On 01/06/22 15:09, Laszlo Ersek wrote:
> Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
>
> The first part of the series introduces the "gcaps_virtio_1_0" guest
> capability (default value, according to the current virt-v2v assumption:
> "true"), and updates the libvirt and JSON outputs to take the new
> capability into account.
>
> In the libvirt output, the virtio device models are flipped to -- or are
> explicitly introduced as -- virtio-transitional if the machine type is
> Q35 and the new "gcaps_virtio_1_0" capability is "false".
>
> In the JSON output, we don't change any device models, only expose the
> new capability, and allow CNV / KubeVirt to act upon it. This follows
> the spirit of <https://bugzilla.redhat.com/show_bug.cgi?id=1942325#c11>.
>
> The second part of the series wraps the osinfo_os_get_all_devices()
> libosinfo API, and introduces a dependent function to retrieve the guest
> OS's support for each of the Q35 chipset and the virtio-1.0 protocol
> (extrapolated from support for virtio1.0-net), from the osinfo database.
>
> The final patch in the series couples the two previous parts. The Notes
> section of this patch contains extensive test results.
>
> Thanks,
> Laszlo
>
> Laszlo Ersek (9):
>   lib/types: reformat "string_of_guestcaps"
>   lib/types: update "string_of_guestcaps"
>   lib/types: introduce the "gcaps_virtio_1_0" guest capability
>   output/create_libvirt_xml: pick "virtio-transitional" models when
>     needed
>   output/create_json: expose "gcaps_virtio_1_0"
>   convert/libosinfo: wrap osinfo_os_get_all_devices()
>   convert/libosinfo_utils: introduce "string_of_osinfo_device_list"
>   convert/libosinfo_utils: introduce "os_support_of_osinfo_device_list"
>   convert: determine machine type and virtio-1.0 from osinfo for x86
>     guests
>
>  convert/convert_linux.ml       | 50 +++++++++------
>  convert/convert_windows.ml     | 31 ++++++---
>  convert/libosinfo-c.c          | 66 ++++++++++++++++++++
>  convert/libosinfo.ml           | 14 +++++
>  convert/libosinfo.mli          | 14 +++++
>  convert/libosinfo_utils.ml     | 54 ++++++++++++++++
>  convert/libosinfo_utils.mli    | 17 +++++
>  lib/types.ml                   | 24 +++++--
>  lib/types.mli                  |  4 ++
>  output/create_json.ml          |  1 +
>  output/create_libvirt_xml.ml   | 28 ++++++---
>  tests/test-v2v-cdrom.expected  |  2 +-
>  tests/test-v2v-floppy.expected |  2 +-
>  tests/test-v2v-i-ova.xml       |  8 +--
>  14 files changed, 266 insertions(+), 49 deletions(-)
>
>
> base-commit: 07b12fe99fb9cf0b75fe45d3eaa07b4bbc1bbe89
>

Merged as commit range f9d5448d2efe..f0cea012d018, with the following updates (as requested by Rich), and with the test suite re-run:

>  1:  6ffaacdf079a !  1:  dc69bb6033bd lib/types: reformat "string_of_guestcaps"
>     @@ -8,6 +8,8 @@
>
>          Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
>          Signed-off-by: Laszlo Ersek <lersek at redhat.com>
>     +    Message-Id: <20220106140910.13695-2-lersek at redhat.com>
>     +    Acked-by: Richard W.M. Jones <rjones at redhat.com>
>
>      diff --git a/lib/types.ml b/lib/types.ml
>      --- a/lib/types.ml
>  2:  47b1335ef3d6 !  2:  08786886302c lib/types: update "string_of_guestcaps"
>     @@ -18,6 +18,8 @@
>          Fixes: 05f780c16f0135c657615520c2245b42de1efc3e
>          Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
>          Signed-off-by: Laszlo Ersek <lersek at redhat.com>
>     +    Message-Id: <20220106140910.13695-3-lersek at redhat.com>
>     +    Acked-by: Richard W.M. Jones <rjones at redhat.com>
>
>      diff --git a/lib/types.ml b/lib/types.ml
>      --- a/lib/types.ml
>  3:  700768d96d72 !  3:  789017805ad0 lib/types: introduce the "gcaps_virtio_1_0" guest capability
>     @@ -13,6 +13,8 @@
>
>          Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
>          Signed-off-by: Laszlo Ersek <lersek at redhat.com>
>     +    Message-Id: <20220106140910.13695-4-lersek at redhat.com>
>     +    Acked-by: Richard W.M. Jones <rjones at redhat.com>
>
>      diff --git a/lib/types.mli b/lib/types.mli
>      --- a/lib/types.mli
>  4:  cb19eff53aaa !  4:  e4cf85bd3ad4 output/create_libvirt_xml: pick "virtio-transitional" models when needed
>     @@ -24,6 +24,8 @@
>
>          Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
>          Signed-off-by: Laszlo Ersek <lersek at redhat.com>
>     +    Message-Id: <20220106140910.13695-5-lersek at redhat.com>
>     +    Acked-by: Richard W.M. Jones <rjones at redhat.com>
>
>      diff --git a/output/create_libvirt_xml.ml b/output/create_libvirt_xml.ml
>      --- a/output/create_libvirt_xml.ml
>  5:  f0162a5024a2 !  5:  511910e1f7e9 output/create_json: expose "gcaps_virtio_1_0"
>     @@ -9,6 +9,8 @@
>
>          Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
>          Signed-off-by: Laszlo Ersek <lersek at redhat.com>
>     +    Message-Id: <20220106140910.13695-6-lersek at redhat.com>
>     +    Acked-by: Richard W.M. Jones <rjones at redhat.com>
>
>      diff --git a/output/create_json.ml b/output/create_json.ml
>      --- a/output/create_json.ml
>  6:  c9a39ebc6842 !  6:  46f5885dba1b convert/libosinfo: wrap osinfo_os_get_all_devices()
>     @@ -7,6 +7,9 @@
>
>          Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
>          Signed-off-by: Laszlo Ersek <lersek at redhat.com>
>     +    Message-Id: <20220106140910.13695-7-lersek at redhat.com>
>     +    [lersek at redhat.com: call OCaml values "<something>v" (Rich)]
>     +    Acked-by: Richard W.M. Jones <rjones at redhat.com>
>
>      diff --git a/convert/libosinfo.mli b/convert/libosinfo.mli
>      --- a/convert/libosinfo.mli
>     @@ -115,12 +118,12 @@
>      +v2v_osinfo_os_get_all_devices (value osv)
>      +{
>      +  CAMLparam1 (osv);
>     -+  CAMLlocal3 (retval, link, props);
>     ++  CAMLlocal3 (retvalv, linkv, propsv);
>      +  g_autoptr (OsinfoDeviceList) dev_list = NULL;
>      +  OsinfoList *ent_list;
>      +  gint ent_nr;
>      +
>     -+  retval = Val_emptylist;
>     ++  retvalv = Val_emptylist;
>      +  dev_list = osinfo_os_get_all_devices (OsinfoOs_t_val (osv), NULL);
>      +  ent_list = OSINFO_LIST (dev_list);
>      +  ent_nr = osinfo_list_get_length (ent_list);
>     @@ -132,21 +135,21 @@
>      +    --ent_nr;
>      +    ent = osinfo_list_get_nth (ent_list, ent_nr);
>      +
>     -+    props = caml_alloc (NUM_DEVICE_PROPS, 0);
>     ++    propsv = caml_alloc (NUM_DEVICE_PROPS, 0);
>      +    for (prop_nr = 0; prop_nr < NUM_DEVICE_PROPS; ++prop_nr) {
>      +      const gchar *prop_val;
>      +
>      +      prop_val = osinfo_entity_get_param_value (ent, device_prop[prop_nr]);
>      +      if (prop_val == NULL)
>      +        prop_val = "";
>     -+      Store_field (props, prop_nr, caml_copy_string (prop_val));
>     ++      Store_field (propsv, prop_nr, caml_copy_string (prop_val));
>      +    }
>      +
>     -+    link = caml_alloc (2, 0);
>     -+    Store_field (link, 0, props);
>     -+    Store_field (link, 1, retval);
>     -+    retval = link;
>     ++    linkv = caml_alloc (2, 0);
>     ++    Store_field (linkv, 0, propsv);
>     ++    Store_field (linkv, 1, retvalv);
>     ++    retvalv = linkv;
>      +  }
>      +
>     -+  CAMLreturn (retval);
>     ++  CAMLreturn (retvalv);
>      +}
>  7:  beb6d02a55bf !  7:  00473c6ac09d convert/libosinfo_utils: introduce "string_of_osinfo_device_list"
>     @@ -9,6 +9,8 @@
>
>          Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
>          Signed-off-by: Laszlo Ersek <lersek at redhat.com>
>     +    Message-Id: <20220106140910.13695-8-lersek at redhat.com>
>     +    Acked-by: Richard W.M. Jones <rjones at redhat.com>
>
>      diff --git a/convert/libosinfo_utils.mli b/convert/libosinfo_utils.mli
>      --- a/convert/libosinfo_utils.mli
>  8:  1f37f5440d66 !  8:  2a2d7e9e1376 convert/libosinfo_utils: introduce "os_support_of_osinfo_device_list"
>     @@ -13,6 +13,10 @@
>
>          Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
>          Signed-off-by: Laszlo Ersek <lersek at redhat.com>
>     +    Message-Id: <20220106140910.13695-9-lersek at redhat.com>
>     +    [lersek at redhat.com: don't break "in" to a new line after a "let" that
>     +     defines a non-function (Rich)]
>     +    Acked-by: Richard W.M. Jones <rjones at redhat.com>
>
>      diff --git a/convert/libosinfo_utils.mli b/convert/libosinfo_utils.mli
>      --- a/convert/libosinfo_utils.mli
>     @@ -57,8 +61,7 @@
>      +      accu
>      +    | { q35; vio10 }, { Libosinfo.id } :: tail ->
>      +      let q35 = q35 || id = "http://qemu.org/chipset/x86/q35"
>     -+      and vio10 = vio10 || id = "http://pcisig.com/pci/1af4/1041"
>     -+      in
>     ++      and vio10 = vio10 || id = "http://pcisig.com/pci/1af4/1041" in
>      +      next { q35; vio10 } tail
>      +  in
>      +  next { q35 = false; vio10 = false }
>  9:  0ba32aed5e96 !  9:  f0cea012d018 convert: determine machine type and virtio-1.0 from osinfo for x86 guests
>     @@ -16,6 +16,8 @@
>
>          Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
>          Signed-off-by: Laszlo Ersek <lersek at redhat.com>
>     +    Message-Id: <20220106140910.13695-10-lersek at redhat.com>
>     +    Acked-by: Richard W.M. Jones <rjones at redhat.com>
>
>      diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml
>      --- a/convert/convert_linux.ml

I'll follow up with the "explicit temporaries" patch later.

Thanks!
Laszlo




More information about the Libguestfs mailing list