On Thu, Apr 5, 2018 at 10:27 AM, Richard W.M. Jones <rjones(a)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(a)redhat.com
https://www.redhat.com/mailman/listinfo/libguestfs