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 networks -
-
+ + 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>