Blob Blame History Raw
From f8c2830f2143de20285ce5bffb86597586be1fa0 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Mon, 7 Sep 2015 13:30:04 +0100
Subject: [PATCH] v2v: -o rhev, -o vdsm: Review XML based on oVirt description
 of format.

After reviewing http://www.ovirt.org/images/8/86/Ovirt_ovf_format.odt
this commit makes some small revisions to the OVF that we generate.

Possible fix for https://bugzilla.redhat.com/show_bug.cgi?id=1260590

(cherry picked from commit 829e3fe7a6ed834939a7a79e453ab873d3328ae1)
---
 v2v/OVF.ml | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/v2v/OVF.ml b/v2v/OVF.ml
index b8a9a38..2ebb00f 100644
--- a/v2v/OVF.ml
+++ b/v2v/OVF.ml
@@ -16,7 +16,11 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *)
 
-(* Functions for dealing with OVF files. *)
+(* Functions for dealing with OVF files.
+ *
+ * The format is described in
+ * http://www.ovirt.org/images/8/86/Ovirt_ovf_format.odt
+ *)
 
 open Common_gettext.Gettext
 open Common_utils
@@ -31,7 +35,7 @@ open DOM
 let title = sprintf "Exported by virt-v2v %s" Config.package_version
 
 (* We set the creation time to be the same for all dates in
- * all metadata files.
+ * all metadata files.  All dates in OVF are UTC.
  *)
 let time = time ()
 let iso_time =
@@ -271,11 +275,11 @@ let rec create_ovf verbose source targets guestcaps inspect
         e "IsStateless" [] [PCData "False"];
         e "Origin" [] [PCData "0"];
         e "VmType" [] [PCData vmtype];
-        e "DefaultDisplayType" [] [PCData "1"];
+        e "DefaultDisplayType" [] [PCData "1" (* qxl *)];
 
         e "Section" ["ovf:id", vm_uuid; "ovf:required", "false";
                      "xsi:type", "ovf:OperatingSystemSection_Type"] [
-          e "Info" [] [PCData "Guest Operating System"];
+          e "Info" [] [PCData inspect.i_product_name];
           e "Description" [] [PCData ostype];
         ];
 
@@ -299,14 +303,15 @@ let rec create_ovf verbose source targets guestcaps inspect
           ];
           e "Item" [] [
             e "rasd:Caption" [] [PCData "USB Controller"];
-            e "rasd:InstanceId" [] [PCData "4"];
+            e "rasd:InstanceId" [] [PCData "3"];
             e "rasd:ResourceType" [] [PCData "23"];
             e "rasd:UsbPolicy" [] [PCData "Disabled"];
           ];
           e "Item" [] [
             e "rasd:Caption" [] [PCData "Graphical Controller"];
-            e "rasd:InstanceId" [] [PCData "5"];
+            e "rasd:InstanceId" [] [PCData (uuidgen ~prog ())];
             e "rasd:ResourceType" [] [PCData "20"];
+            e "Type" [] [PCData "video"];
             e "rasd:VirtualQuantity" [] [PCData "1"];
             e "rasd:Device" [] [PCData "qxl"];
           ]
@@ -365,7 +370,7 @@ and add_disks targets guestcaps output_alloc sd_uuid image_uuids vol_uuids ovf =
     fun i ({ target_overlay = ov } as t, image_uuid, vol_uuid) ->
       let is_boot_drive = i == 0 in
 
-      let fileref = image_uuid // vol_uuid in
+      let fileref = sprintf "%s/%s" image_uuid vol_uuid in
 
       (* ovf:size and ovf:actual_size fields are integer GBs.  If you
        * use floating point numbers then RHEV will fail to parse them.
@@ -447,6 +452,7 @@ and add_disks targets guestcaps output_alloc sd_uuid image_uuids vol_uuids ovf =
           e "rasd:Caption" [] [PCData caption];
           e "rasd:InstanceId" [] [PCData vol_uuid];
           e "rasd:ResourceType" [] [PCData "17"];
+          e "Type" [] [PCData "disk"];
           e "rasd:HostResource" [] [PCData fileref];
           e "rasd:Parent" [] [PCData "00000000-0000-0000-0000-000000000000"];
           e "rasd:Template" [] [PCData "00000000-0000-0000-0000-000000000000"];
@@ -498,10 +504,11 @@ and add_networks nics guestcaps ovf =
 
       let item =
         let children = [
-          e "rasd:InstanceId" [] [PCData "3"];
+          e "rasd:InstanceId" [] [PCData (uuidgen ~prog ())];
           e "rasd:Caption" [] [PCData (sprintf "Ethernet adapter on %s" vnet)];
           e "rasd:ResourceType" [] [PCData "10"];
           e "rasd:ResourceSubType" [] [PCData model];
+          e "Type" [] [PCData "interface"];
           e "rasd:Connection" [] [PCData vnet];
           e "rasd:Name" [] [PCData dev];
         ] in
-- 
1.8.3.1