[Libguestfs] [PATCH] v2v: OVF: write ovirt:id attribute for the OS in OVirt flavour

Arik Hadas ahadas at redhat.com
Thu Apr 5 07:56:54 UTC 2018


On Thu, Apr 5, 2018 at 10:27 AM, Richard W.M. Jones <rjones at redhat.com>
wrote:

> On Wed, Apr 04, 2018 at 06:22:12PM +0200, Pino Toscano wrote:
> > When writing the OVF in OVirt flavour, add a ovirt:id attribute to the
> > OperatingSystemSection tag: this attribute represents the numeric value
> > of the ostype ID, which is ignored by oVirt when parsing OVFs in API
> > mode.
> > ---
> >  v2v/create_ovf.ml | 202 ++++++++++++++++++++++++++++++
> +++++++++++++++++++++++-
> >  1 file changed, 201 insertions(+), 1 deletion(-)
> >
> > diff --git a/v2v/create_ovf.ml b/v2v/create_ovf.ml
> > index 64edd2b86..34cd925e7 100644
> > --- a/v2v/create_ovf.ml
> > +++ b/v2v/create_ovf.ml
> > @@ -216,6 +216,203 @@ and get_ostype = function
> >        typ distro major minor arch product;
> >      "Unassigned"
> >
> > +(* Determine the ovirt:id attribute from libguestfs inspection.
> > + * See ovirt-engine sources, file:
> > + *   packaging/conf/osinfo-defaults.properties
> > + * and also:
> > + *   https://bugzilla.redhat.com/show_bug.cgi?id=1219857#c9
> > + *)
> > +and get_ovirt_osid = function
> > +  | { i_type = "linux"; i_distro = ("rhel"|"centos"); i_major_version =
> 3;
> > +      i_arch = "i386" } ->
> > +    9
> > +
> > +  | { i_type = "linux"; i_distro = ("rhel"|"centos"); i_major_version =
> 3;
> > +      i_arch = "x86_64" } ->
> > +    15
> > +
> > +  | { i_type = "linux"; i_distro = ("rhel"|"centos"); i_major_version =
> 4;
> > +      i_arch = "i386" } ->
> > +    8
> > +
> > +  | { i_type = "linux"; i_distro = ("rhel"|"centos"); i_major_version =
> 4;
> > +      i_arch = "x86_64" } ->
> > +    14
> > +
> > +  | { i_type = "linux"; i_distro = ("rhel"|"centos"); i_major_version =
> 5;
> > +      i_arch = "i386" } ->
> > +    7
> > +
> > +  | { i_type = "linux"; i_distro = ("rhel"|"centos"); i_major_version =
> 5;
> > +      i_arch = "x86_64" } ->
> > +    13
> > +
> > +  | { i_type = "linux"; i_distro = ("rhel"|"centos"); i_major_version =
> 6;
> > +      i_arch = "i386" } ->
> > +    18
> > +
> > +  | { i_type = "linux"; i_distro = ("rhel"|"centos"); i_major_version =
> 6;
> > +      i_arch = "x86_64" } ->
> > +    19
> > +
> > +  | { i_type = "linux"; i_distro = ("rhel"|"centos"); i_major_version =
> 6;
> > +      i_minor_version = min; i_arch = ("ppc64"|"ppc64le") } when min >=
> 9 ->
> > +    1007
> > +
> > +  | { i_type = "linux"; i_distro = ("rhel"|"centos"); i_major_version =
> 6;
> > +      i_arch = ("ppc64"|"ppc64le") } ->
> > +    1003
> > +
> > +  | { i_type = "linux"; i_distro = ("rhel"|"centos"); i_major_version =
> 7;
> > +      i_arch = "x86_64" } ->
> > +    24
> > +
> > +  | { i_type = "linux"; i_distro = ("rhel"|"centos"); i_major_version =
> 7;
> > +      i_arch = ("ppc64"|"ppc64le") } ->
> > +    1006
> > +
> > +  | { i_type = "linux"; i_distro = ("rhel"|"centos"); i_major_version =
> 7;
> > +      i_arch = "s390x" } ->
> > +    2003
> > +
> > +  | { i_type = "linux"; i_distro = "sles"; i_major_version = 11;
> > +      i_arch = "x86_64" } ->
> > +    1193
> > +
> > +  | { i_type = "linux"; i_distro = "sles"; i_major_version = 11;
> > +      i_arch = "ppc64" | "ppc64le" } ->
> > +    1004
> > +
> > +  | { i_type = "linux"; i_distro = "sles"; i_major_version = 12;
> > +      i_arch = "s390x" } ->
> > +    2004
> > +
> > +   (* Only Debian 7 is available, so use it for any 7+ version. *)
> > +  | { i_type = "linux"; i_distro = "debian"; i_major_version = v }
> > +      when v >= 7 ->
> > +    1300
> > +
> > +   (* Only Ubuntu 12.04 to 14.04 are available, so use them starting
> > +    * from 12.04, and 14.04 for anything after it.
> > +    *)
> > +  | { i_type = "linux"; i_distro = "ubuntu"; i_major_version = v;
> > +      i_arch = ("ppc64"|"ppc64le") } when v >= 14 ->
> > +    1005
> > +
> > +  | { i_type = "linux"; i_distro = "ubuntu"; i_major_version = v;
> > +      i_arch = "s390x" } when v >= 16 ->
> > +    2005
> > +
> > +  | { i_type = "linux"; i_distro = "ubuntu"; i_major_version = v }
> > +      when v >= 14 ->
> > +    1256
> > +
> > +  | { i_type = "linux"; i_distro = "ubuntu"; i_major_version = 12;
> > +      i_minor_version = 4 } ->
> > +    1252
> > +
> > +  | { i_type = "linux"; i_distro = "ubuntu"; i_major_version = 12;
> > +      i_minor_version = 10 } ->
> > +    1253
> > +
> > +  | { i_type = "linux"; i_distro = "ubuntu"; i_major_version = 13;
> > +      i_minor_version = 4 } ->
> > +    1254
> > +
> > +  | { i_type = "linux"; i_distro = "ubuntu"; i_major_version = 13;
> > +      i_minor_version = 10 } ->
> > +    1255
> > +
> > +  | { i_type = "linux"; i_arch = ("ppc64"|"ppc64le") } ->
> > +    1002
> > +
> > +  | { i_type = "linux"; i_arch = "s390x" } ->
> > +    2002
> > +
> > +  | { i_type = "linux" } ->
> > +    5
> > +
> > +  | { i_type = "windows"; i_major_version = 5; i_minor_version = 1 } ->
> > +    1 (* no architecture differentiation of XP on RHV *)
> > +
> > +  | { i_type = "windows"; i_major_version = 5; i_minor_version = 2;
> > +      i_product_name = product } when String.find product "XP" >= 0 ->
> > +    1 (* no architecture differentiation of XP on RHV *)
> > +
> > +  | { i_type = "windows"; i_major_version = 5; i_minor_version = 2;
> > +      i_arch = "i386" } ->
> > +    3
> > +
> > +  | { i_type = "windows"; i_major_version = 5; i_minor_version = 2;
> > +      i_arch = "x86_64" } ->
> > +    10
> > +
> > +  | { i_type = "windows"; i_major_version = 6; i_minor_version = 0;
> > +      i_arch = "i386" } ->
> > +    4
> > +
> > +  | { i_type = "windows"; i_major_version = 6; i_minor_version = 0;
> > +      i_arch = "x86_64" } ->
> > +    16
> > +
> > +  | { i_type = "windows"; i_major_version = 6; i_minor_version = 1;
> > +      i_arch = "i386" } ->
> > +    11
> > +
> > +  | { i_type = "windows"; i_major_version = 6; i_minor_version = 1;
> > +      i_arch = "x86_64"; i_product_variant = "Client" } ->
> > +    12
> > +
> > +  | { i_type = "windows"; i_major_version = 6; i_minor_version = 1;
> > +      i_arch = "x86_64" } ->
> > +    17
> > +
> > +  | { i_type = "windows"; i_major_version = 6; i_minor_version = 2;
> > +      i_arch = "i386" } ->
> > +    20
> > +
> > +  | { i_type = "windows"; i_major_version = 6; i_minor_version = 2;
> > +      i_arch = "x86_64"; i_product_variant = "Client" } ->
> > +    21
> > +
> > +  | { i_type = "windows"; i_major_version = 6; i_minor_version = 2;
> > +      i_arch = "x86_64" } ->
> > +    23
> > +
> > +   (* Treat Windows 8.1 client like Windows 8.  See:
> > +    * https://bugzilla.redhat.com/show_bug.cgi?id=1309580#c4
> > +    *)
> > +  | { i_type = "windows"; i_major_version = 6; i_minor_version = 3;
> > +      i_arch = "i386"; i_product_variant = "Client" } ->
> > +    20
> > +
> > +  | { i_type = "windows"; i_major_version = 6; i_minor_version = 3;
> > +      i_arch = "x86_64"; i_product_variant = "Client" } ->
> > +    21
> > +
> > +  | { i_type = "windows"; i_major_version = 6; i_minor_version = 3;
> > +      i_arch = "x86_64" } ->
> > +    23
> > +
> > +  | { i_type = "windows"; i_major_version = 10; i_minor_version = 0;
> > +      i_arch = "i386" } ->
> > +    26
> > +
> > +  | { i_type = "windows"; i_major_version = 10; i_minor_version = 0;
> > +      i_arch = "x86_64"; i_product_variant = "Client" } ->
> > +    27
> > +
> > +  | { i_type = "windows"; i_major_version = 10; i_minor_version = 0;
> > +      i_arch = "x86_64" } ->
> > +    29
> > +
> > +  | { i_type = typ; i_distro = distro;
> > +      i_major_version = major; i_minor_version = minor; i_arch = arch;
> > +      i_product_name = product } ->
> > +    warning (f_"unknown guest operating system: %s %s %d.%d %s (%s)")
> > +      typ distro major minor arch product;
> > +    0
> > +
> >  (* Set the <Origin/> element based on the source hypervisor.
> >   * https://bugzilla.redhat.com/show_bug.cgi?id=1342398#c6
> >   * https://gerrit.ovirt.org/#/c/59147/
> > @@ -295,6 +492,7 @@ let rec create_ovf source targets guestcaps inspect
> >        "xmlns:vssd", "http://schemas.dmtf.org/wbem/
> wscim/1/cim-schema/2/CIM_VirtualSystemSettingData";
> >        "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance";
> >        "xmlns:ovf", "http://schemas.dmtf.org/ovf/envelope/1/";
> > +      "xmlns:ovirt", "http://ovirt.org/vm/tune/1.0";
>

The URL should be "http://www.ovirt.org/ovf" (not yet exists, but that is
where we plan to place the documentation of the oVirt-specific additions to
the OVF)


> >        "ovf:version", "0.9"
> >      ] [
> >        Comment generated_by;
> > @@ -357,8 +555,10 @@ let rec create_ovf source targets guestcaps inspect
> >          ] in
> >          (match ovf_flavour with
> >          | OVirt ->
> > +          let ovirt_osid = get_ovirt_osid inspect in
> >            e "OperatingSystemSection" ["ovf:id", vm_uuid;
> > -                                      "ovf:required", "false"]
> > +                                      "ovf:required", "false";
> > +                                      "ovirt:id", string_of_int
> ovirt_osid]
>

If there is one generator in virt-v2v for 'oVirt flavour' that is supposed
to cover both OVFs that are placed in oVirt's export domain and those that
are uploaded via the API then that's fine, but if that is an API-specific
generator then it's better to place the 'ovf:id' attribute that points to
the VM-UUID as a property of the 'VirtualSystem'element rather than of the '
OperatingSystemSection' element.


> >              osinfo_subnodes
> >          | RHVExportStorageDomain ->
> >            e "Section" ["ovf:id", vm_uuid; "ovf:required", "false";
>
> Yes looks OK, ACK.
>
> Also Michal gave his ACK on IRC.
>
> Rich.
>
> --
> Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~
> rjones
> Read my programming and virtualization blog: http://rwmj.wordpress.com
> libguestfs lets you edit virtual machines.  Supports shell scripting,
> bindings from many languages.  http://libguestfs.org
>
> _______________________________________________
> Libguestfs mailing list
> Libguestfs at redhat.com
> https://www.redhat.com/mailman/listinfo/libguestfs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20180405/11ce005a/attachment.htm>


More information about the Libguestfs mailing list