| From 14cfe80643a7df4ddf412aebdf39543344c1cf6e Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Golembiovsk=C3=BD?= <tgolembi@redhat.com> |
| Date: Thu, 22 Feb 2018 11:41:08 +0100 |
| Subject: [PATCH] v2v: vdsm: add --vdsm-fixed-ovf option |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| Add option for -o vdsm that enables output of the modified OVF. oVirt |
| engine should already be able to consume the OVF, but let's not take any |
| chances and enable it only by command line argument. It can be made |
| default later when it receives proper testing. |
| |
| Signed-off-by: Tomáš Golembiovský <tgolembi@redhat.com> |
| (cherry picked from commit 285014b290507865fd2020e44ea453af0262b624) |
| |
| v2v/cmdline.ml | 10 ++++++++++ |
| v2v/create_ovf.ml | 7 +++++++ |
| v2v/create_ovf.mli | 9 +++++++++ |
| v2v/output_vdsm.ml | 9 +++++++-- |
| v2v/output_vdsm.mli | 1 + |
| v2v/test-v2v-o-vdsm-options.sh | 3 ++- |
| v2v/virt-v2v.pod | 20 ++++++++++++++++++++ |
| 7 files changed, 56 insertions(+), 3 deletions(-) |
| |
| diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml |
| index d88d0a579..75909ee77 100644 |
| |
| |
| @@ -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_options output_alloc, |
| output_format, output_alloc in |
| diff --git a/v2v/create_ovf.ml b/v2v/create_ovf.ml |
| index 0ec0a088c..d0735afce 100644 |
| |
| |
| @@ -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 |
| |
| |
| @@ -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 ce286d327..b76a2e930 100644 |
| |
| |
| @@ -32,6 +32,7 @@ type vdsm_options = { |
| vm_uuid : string; |
| ovf_output : string; |
| compat : string; |
| + ovf_flavour : Create_ovf.ovf_flavour; |
| } |
| |
| class output_vdsm os vdsm_options 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_options.image_uuids)) |
| (String.concat "" |
| @@ -49,6 +50,10 @@ object |
| (match vdsm_options.compat with |
| | "0.10" -> "" (* currently this is the default, so don't print it *) |
| | s -> sprintf " --vdsm-compat=%s" s) |
| + (match vdsm_options.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_options.image_uuids |
| vdsm_options.vol_uuids |
| vdsm_options.vm_uuid |
| - Create_ovf.RHVExportStorageDomain in |
| + vdsm_options.ovf_flavour in |
| |
| (* Write it to the metadata file. *) |
| let file = vdsm_options.ovf_output // vdsm_options.vm_uuid ^ ".ovf" in |
| diff --git a/v2v/output_vdsm.mli b/v2v/output_vdsm.mli |
| index 401a71ec4..6ed684638 100644 |
| |
| |
| @@ -24,6 +24,7 @@ type vdsm_options = { |
| 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.sh b/v2v/test-v2v-o-vdsm-options.sh |
| index 753efc4e7..4ad5d4aad 100755 |
| |
| |
| @@ -55,7 +55,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 cced114f3..0ea5fa97f 100644 |
| |
| |
| @@ -759,6 +759,26 @@ hex digit can be C<0-9> or C<a-f>), conforming to S<OSF DCE 1.1>. |
| |
| 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<rhevexp>, but this may change in |
| +the future. |
| + |
| =item B<-v> |
| |
| =item B<--verbose> |
| -- |
| 2.21.0 |
| |