Straightforward refactoring. Apart from small modifications to clean
up the code and reorder the properties more logically there should be
no functional change.
---
v2v/Makefile.am | 2 +
v2v/openstack_image_properties.ml | 100 +++++++++++++++++++++++++++++
v2v/openstack_image_properties.mli | 34 ++++++++++
v2v/output_glance.ml | 85 ++++--------------------
4 files changed, 148 insertions(+), 73 deletions(-)
diff --git a/v2v/Makefile.am b/v2v/Makefile.am
index 73836a1be..6e78ec4fb 100644
--- a/v2v/Makefile.am
+++ b/v2v/Makefile.am
@@ -65,6 +65,7 @@ SOURCES_MLI = \
modules_list.mli \
name_from_disk.mli \
networks.mli \
+ openstack_image_properties.mli \
output_glance.mli \
output_libvirt.mli \
output_local.mli \
@@ -112,6 +113,7 @@ SOURCES_ML = \
parse_vmx.ml \
parse_libvirt_xml.ml \
create_libvirt_xml.ml \
+ openstack_image_properties.ml \
qemuopts.ml \
input_libvirtxml.ml \
input_libvirt_other.ml \
diff --git a/v2v/openstack_image_properties.ml b/v2v/openstack_image_properties.ml
new file mode 100644
index 000000000..3f199d75e
--- /dev/null
+++ b/v2v/openstack_image_properties.ml
@@ -0,0 +1,100 @@
+(* virt-v2v
+ * Copyright (C) 2009-2018 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(* Convert metadata to a list of OpenStack image properties. *)
+
+open Printf
+
+open Std_utils
+
+open Types
+
+let create source target_buses guestcaps inspect target_firmware =
+ let properties = ref [] in
+
+ List.push_back_list properties [
+ "architecture", guestcaps.gcaps_arch;
+ "hypervisor_type", "kvm";
+ "vm_mode", "hvm";
+
+ "hw_disk_bus",
+ (match guestcaps.gcaps_block_bus with
+ | Virtio_blk -> "virtio"
+ | Virtio_SCSI -> "scsi"
+ | IDE -> "ide");
+ "hw_vif_model",
+ (match guestcaps.gcaps_net_bus with
+ | Virtio_net -> "virtio"
+ | E1000 -> "e1000"
+ | RTL8139 -> "rtl8139");
+ "hw_video_model",
+ (match guestcaps.gcaps_video with
+ | QXL -> "qxl"
+ | Cirrus -> "cirrus");
+ "hw_machine_type",
+ (match guestcaps.gcaps_machine with
+ | I440FX -> "pc"
+ | Q35 -> "q35"
+ | Virt -> "virt");
+
+ "os_type", inspect.i_type;
+ "os_distro",
+ (match inspect.i_distro with
+ (*
https://docs.openstack.org/python-glanceclient/latest/cli/property-keys.html *)
+ | "archlinux" -> "arch"
+ | "sles" -> "sled"
+ | x -> x (* everything else is the same in libguestfs and OpenStack*)
+ )
+ ];
+
+ (match source.s_cpu_topology with
+ | None ->
+ List.push_back properties ("hw_cpu_sockets", "1");
+ List.push_back properties ("hw_cpu_cores", string_of_int source.s_vcpu);
+ | Some { s_cpu_sockets = sockets; s_cpu_cores = cores;
+ s_cpu_threads = threads } ->
+ List.push_back properties ("hw_cpu_sockets", string_of_int sockets);
+ List.push_back properties ("hw_cpu_cores", string_of_int cores);
+ List.push_back properties ("hw_cpu_threads", string_of_int threads);
+ );
+
+ (match guestcaps.gcaps_block_bus with
+ | Virtio_SCSI ->
+ List.push_back properties ("hw_scsi_model", "virtio-scsi")
+ | Virtio_blk | IDE -> ()
+ );
+
+ (match inspect.i_major_version, inspect.i_minor_version with
+ | 0, 0 -> ()
+ | x, 0 -> List.push_back properties ("os_version", string_of_int x)
+ | x, y -> List.push_back properties ("os_version", sprintf
"%d.%d" x y)
+ );
+
+ if guestcaps.gcaps_virtio_rng then
+ List.push_back properties ("hw_rng_model", "virtio");
+ (* XXX Neither memory balloon nor pvpanic are supported by
+ * Glance at this time.
+ *)
+
+ (match target_firmware with
+ | TargetBIOS -> ()
+ | TargetUEFI ->
+ List.push_back properties ("hw_firmware_type", "uefi")
+ );
+
+ !properties
diff --git a/v2v/openstack_image_properties.mli b/v2v/openstack_image_properties.mli
new file mode 100644
index 000000000..22dadc3a4
--- /dev/null
+++ b/v2v/openstack_image_properties.mli
@@ -0,0 +1,34 @@
+(* virt-v2v
+ * Copyright (C) 2009-2018 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(** Convert metadata to a list of OpenStack image properties.
+
+ These properties are suitable for use by Glance or Cinder.
+ Note for Cinder there is a difference between properties and
+ image properties (this module implements the latter). *)
+
+val create : Types.source -> Types.target_buses -> Types.guestcaps ->
Types.inspect -> Types.target_firmware -> (string * string) list
+(** [create source target_buses guestcaps inspect target_firmware]
+ translates the metadata into a list of image properties suitable
+ for OpenStack.
+
+ The returned list is a set of key=value pairs which can be passed
+ to Glance (using [--property key=value]) or to Cinder. For
+ Cinder note that you must not use [--property] since that sets
+ volume properties which are different from image properties.
+ Instead use [openstack volume set --image-property key=value ...]. *)
diff --git a/v2v/output_glance.ml b/v2v/output_glance.ml
index 4fd621d90..7e51d5798 100644
--- a/v2v/output_glance.ml
+++ b/v2v/output_glance.ml
@@ -63,74 +63,20 @@ object
(* Write targets to a temporary local file - see above for reason. *)
List.map (fun (_, ov) -> TargetFile (tmpdir // ov.ov_sd)) overlays
- method create_metadata source targets _ guestcaps inspect target_firmware =
- (* Collect the common properties for all the disks. *)
+ method create_metadata source targets
+ target_buses guestcaps inspect target_firmware =
let min_ram = source.s_memory /^ 1024L /^ 1024L in
- let common_properties =
- let properties = ref [
- "hw_disk_bus",
- (match guestcaps.gcaps_block_bus with
- | Virtio_blk -> "virtio"
- | Virtio_SCSI -> "scsi"
- | IDE -> "ide");
- "hw_vif_model",
- (match guestcaps.gcaps_net_bus with
- | Virtio_net -> "virtio"
- | E1000 -> "e1000"
- | RTL8139 -> "rtl8139");
- "hw_video_model",
- (match guestcaps.gcaps_video with
- | QXL -> "qxl"
- | Cirrus -> "cirrus");
- "hw_machine_type",
- (match guestcaps.gcaps_machine with
- | I440FX -> "pc"
- | Q35 -> "q35"
- | Virt -> "virt");
- "architecture", guestcaps.gcaps_arch;
- "hypervisor_type", "kvm";
- "vm_mode", "hvm";
- "os_type", inspect.i_type;
- "os_distro",
- (match inspect.i_distro with
- (*
https://docs.openstack.org/python-glanceclient/latest/cli/property-keys.html
*)
- | "archlinux" -> "arch"
- | "sles" -> "sled"
- | x -> x (* everything else is the same in libguestfs and OpenStack*)
- )
- ] in
- (match source.s_cpu_topology with
- | None ->
- List.push_back properties ("hw_cpu_sockets", "1");
- List.push_back properties ("hw_cpu_cores", string_of_int
source.s_vcpu);
- | Some { s_cpu_sockets = sockets; s_cpu_cores = cores;
- s_cpu_threads = threads } ->
- List.push_back properties ("hw_cpu_sockets", string_of_int sockets);
- List.push_back properties ("hw_cpu_cores", string_of_int cores);
- List.push_back properties ("hw_cpu_threads", string_of_int threads);
- );
- (match guestcaps.gcaps_block_bus with
- | Virtio_SCSI ->
- List.push_back properties ("hw_scsi_model", "virtio-scsi")
- | Virtio_blk | IDE -> ()
- );
- (match inspect.i_major_version, inspect.i_minor_version with
- | 0, 0 -> ()
- | x, 0 -> List.push_back properties ("os_version", string_of_int x)
- | x, y -> List.push_back properties ("os_version", sprintf
"%d.%d" x y)
- );
- if guestcaps.gcaps_virtio_rng then
- List.push_back properties ("hw_rng_model", "virtio");
- (* XXX Neither memory balloon nor pvpanic are supported by
- * Glance at this time.
- *)
- (match target_firmware with
- | TargetBIOS -> ()
- | TargetUEFI ->
- List.push_back properties ("hw_firmware_type", "uefi")
- );
- !properties in
+ (* Get the image properties. *)
+ let properties =
+ Openstack_image_properties.create source target_buses guestcaps
+ inspect target_firmware in
+ let properties =
+ List.flatten (
+ List.map (
+ fun (k, v) -> [ "--property"; sprintf "%s=%s" k v ]
+ ) properties
+ ) in
(* The first disk, assumed to be the system disk, will be called
* "guestname". Subsequent disks, assumed to be data disks,
@@ -143,13 +89,6 @@ object
if i == 0 then source.s_name
else sprintf "%s-disk%d" source.s_name (i+1) in
- let properties =
- List.flatten (
- List.map (
- fun (k, v) -> [ "--property"; sprintf "%s=%s" k v ]
- ) common_properties
- ) in
-
let target_file =
match target_file with
| TargetFile s -> s
--
2.18.0