diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml
index efad080cc..8d7c5e217 100644
--- a/v2v/cmdline.ml
+++ b/v2v/cmdline.ml
@@ -79,6 +79,11 @@ let parse_cmdline () =
let vdsm_compat = ref "0.10" in
let set_vdsm_compat s = vdsm_compat := s in
+ let vdsm_ovf_flavour = ref Create_ovf.RHVExportStorageDomain in
+ let ovf_flavours_str = String.concat "|" Create_ovf.ovf_flavours in
+ let set_vdsm_ovf_flavour arg =
+ vdsm_ovf_flavour := Create_ovf.ovf_flavour_of_string arg in
+
let set_string_option_once optname optref arg =
match !optref with
| Some _ ->
@@ -251,6 +256,8 @@ let parse_cmdline () =
s_"Output VM UUID";
[ L"vdsm-ovf-output" ], Getopt.String ("-", set_string_option_once "--vdsm-ovf-output" vdsm_ovf_output),
s_"Output OVF file";
+ [ L"vdsm-ovf-flavour" ], Getopt.Symbol (ovf_flavours_str, Create_ovf.ovf_flavours, set_vdsm_ovf_flavour),
+ s_"Set the type of generated OVF (default rhvexp)";
[ L"vmtype" ], Getopt.String ("-", vmtype_warning),
s_"Ignored for backwards compatibility";
] in
@@ -327,6 +334,7 @@ read the man page virt-v2v(1).
let vdsm_vol_uuids = List.rev !vdsm_vol_uuids in
let vdsm_vm_uuid = !vdsm_vm_uuid in
let vdsm_ovf_output = Option.default "." !vdsm_ovf_output in
+ let vdsm_ovf_flavour = !vdsm_ovf_flavour in
(* No arguments and machine-readable mode? Print out some facts
* about what this binary supports.
@@ -343,6 +351,7 @@ read the man page virt-v2v(1).
List.iter (printf "input:%s\n") (Modules_list.input_modules ());
List.iter (printf "output:%s\n") (Modules_list.output_modules ());
List.iter (printf "convert:%s\n") (Modules_list.convert_modules ());
+ List.iter (printf "ovf:%s\n") Create_ovf.ovf_flavours;
exit 0
);
@@ -542,6 +551,7 @@ read the man page virt-v2v(1).
vm_uuid = vdsm_vm_uuid;
ovf_output = vdsm_ovf_output;
compat = vdsm_compat;
+ ovf_flavour = vdsm_ovf_flavour;
} in
Output_vdsm.output_vdsm os vdsm_params output_alloc,
output_format, output_alloc in
diff --git a/v2v/create_ovf.ml b/v2v/create_ovf.ml
index 8eeaa0945..5d5682b1a 100644
--- a/v2v/create_ovf.ml
+++ b/v2v/create_ovf.ml
@@ -33,6 +33,13 @@ type ovf_flavour =
| OVirt
| RHVExportStorageDomain
+let ovf_flavours = ["ovirt"; "rhvexp"]
+
+let ovf_flavour_of_string = function
+ | "ovirt" -> OVirt
+ | "rhvexp" -> RHVExportStorageDomain
+ | flav -> invalid_arg flav
+
(* We set the creation time to be the same for all dates in
* all metadata files. All dates in OVF are UTC.
*)
diff --git a/v2v/create_ovf.mli b/v2v/create_ovf.mli
index 8a8c7dd12..2d80660e3 100644
--- a/v2v/create_ovf.mli
+++ b/v2v/create_ovf.mli
@@ -20,6 +20,15 @@ type ovf_flavour =
| OVirt
| RHVExportStorageDomain
+(** The string representation of available OVF flavours. *)
+val ovf_flavours : string list
+
+(** Convert from a string to the corresponding OVF flavour.
+
+ Throw [Invalid_argument] if the string does not match any
+ valid flavour. *)
+val ovf_flavour_of_string : string -> ovf_flavour
+
(** Create OVF and related files for RHV.
The format for RHV export storage domain is described in:
diff --git a/v2v/output_vdsm.ml b/v2v/output_vdsm.ml
index 76a3a0bd3..32615fa1f 100644
--- a/v2v/output_vdsm.ml
+++ b/v2v/output_vdsm.ml
@@ -32,6 +32,7 @@ type vdsm_params = {
vm_uuid : string;
ovf_output : string;
compat : string;
+ ovf_flavour : Create_ovf.ovf_flavour;
}
class output_vdsm os vdsm_params output_alloc =
@@ -39,7 +40,7 @@ object
inherit output
method as_options =
- sprintf "-o vdsm -os %s%s%s --vdsm-vm-uuid %s --vdsm-ovf-output %s%s" os
+ sprintf "-o vdsm -os %s%s%s --vdsm-vm-uuid %s --vdsm-ovf-output %s%s%s" os
(String.concat ""
(List.map (sprintf " --vdsm-image-uuid %s") vdsm_params.image_uuids))
(String.concat ""
@@ -49,6 +50,10 @@ object
(match vdsm_params.compat with
| "0.10" -> "" (* currently this is the default, so don't print it *)
| s -> sprintf " --vdsm-compat=%s" s)
+ (match vdsm_params.ovf_flavour with
+ | Create_ovf.OVirt -> "--vdsm-ovf-flavour=ovf"
+ (* currently this is the default, so don't print it *)
+ | Create_ovf.RHVExportStorageDomain -> "")
method supported_firmware = [ TargetBIOS ]
@@ -176,7 +181,7 @@ object
vdsm_params.image_uuids
vdsm_params.vol_uuids
vdsm_params.vm_uuid
- Create_ovf.RHVExportStorageDomain in
+ vdsm_params.ovf_flavour in
(* Write it to the metadata file. *)
let file = vdsm_params.ovf_output // vdsm_params.vm_uuid ^ ".ovf" in
diff --git a/v2v/output_vdsm.mli b/v2v/output_vdsm.mli
index 95a84ee46..f7f6f59ee 100644
--- a/v2v/output_vdsm.mli
+++ b/v2v/output_vdsm.mli
@@ -24,6 +24,7 @@ type vdsm_params = {
vm_uuid : string; (* --vdsm-vm-uuid *)
ovf_output : string; (* --vdsm-ovf-output *)
compat : string; (* --vdsm-compat=0.10|1.1 *)
+ ovf_flavour : Create_ovf.ovf_flavour;
}
(** Miscellaneous extra command line parameters used by VDSM. *)
diff --git a/v2v/test-v2v-o-vdsm-options.ovf.expected b/v2v/test-v2v-o-vdsm-options.ovf.expected
index 372469e21..babf88b7d 100644
--- a/v2v/test-v2v-o-vdsm-options.ovf.expected
+++ b/v2v/test-v2v-o-vdsm-options.ovf.expected
@@ -2,17 +2,17 @@
-
+
-
-
+
+
List of Virtual Disks
-
-
-
+
+
+
windows
00000000-0000-0000-0000-000000000000
Blank
@@ -25,11 +25,11 @@
False
0
1
-
+
Microsoft Windows 7 Phony Edition
Windows7
-
-
+
+
1 CPU, 1024 Memory
-
1 virtual cpu
@@ -66,7 +66,7 @@
VOL
17
disk
- IMAGE/VOL
+ VOL
00000000-0000-0000-0000-000000000000
00000000-0000-0000-0000-000000000000
@@ -87,6 +87,6 @@
eth0
00:11:22:33:44:55
-
-
+
+
diff --git a/v2v/test-v2v-o-vdsm-options.sh b/v2v/test-v2v-o-vdsm-options.sh
index 44ad79a36..106f8694e 100755
--- a/v2v/test-v2v-o-vdsm-options.sh
+++ b/v2v/test-v2v-o-vdsm-options.sh
@@ -54,7 +54,8 @@ $VG virt-v2v --debug-gc \
--vdsm-vol-uuid VOL \
--vdsm-vm-uuid VM \
--vdsm-ovf-output $d/12345678-1234-1234-1234-123456789abc/master/vms/VM \
- --vdsm-compat=1.1
+ --vdsm-compat=1.1 \
+ --vdsm-ovf-flavour=ovirt
# Test the OVF metadata was created.
test -f $d/12345678-1234-1234-1234-123456789abc/master/vms/VM/VM.ovf
diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod
index b2face339..db91a7a4c 100644
--- a/v2v/virt-v2v.pod
+++ b/v2v/virt-v2v.pod
@@ -759,6 +759,26 @@ hex digit can be C<0-9> or C), conforming to S.
These options can only be used with I<-o vdsm>.
+=item B<--vdsm-ovf-flavour> flavour
+
+This option controls the format of the OVF generated at the end of conversion.
+Currently there are two possible flavours:
+
+=over 4
+
+=item rhevexp
+
+The OVF format used in RHV export storage domain.
+
+=item ovirt
+
+The OVF format understood by oVirt REST API.
+
+=back
+
+For backward compatibility the default is I, but this may change in
+the future.
+
=item B<-v>
=item B<--verbose>