[Libguestfs] [v2v PATCH 2/2] -o rhv-upload: check guest arch with cluster
Richard W.M. Jones
rjones at redhat.com
Mon Feb 3 12:08:24 UTC 2020
On Tue, Jan 28, 2020 at 02:46:28PM +0100, Pino Toscano wrote:
> Get the CPU architecture of the specified cluster, and error out in case
> the architecture of the guest is not the same as the cluster one.
> ---
> .../ovirtsdk4/types.py | 16 ++++++++++++++++
> v2v/output_rhv_upload.ml | 18 +++++++++++++++++-
> v2v/rhv-upload-precheck.py | 5 +++++
> 3 files changed, 38 insertions(+), 1 deletion(-)
>
> diff --git a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py b/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py
> index b8d4a728..732887aa 100644
> --- a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py
> +++ b/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py
> @@ -22,9 +22,25 @@ from enum import Enum
> from ovirtsdk4 import imageio_port
>
>
> +class Architecture(Enum):
> + UNDEFINED = "undefined"
> + X86_64 = "x86_64"
> +
> + def __init__(self, arch):
> + self._arch = arch
> +
> + def __str__(self):
> + return self._arch
> +
> +
> +class Cpu(object):
> + architecture = Architecture.X86_64
> +
> +
> class Cluster(object):
> id = "2e97537b-a783-4706-af9e-75cb2e032dcd"
> name = "Default"
> + cpu = Cpu()
>
>
> class Configuration(object):
> diff --git a/v2v/output_rhv_upload.ml b/v2v/output_rhv_upload.ml
> index 01b1ce4a..db14755c 100644
> --- a/v2v/output_rhv_upload.ml
> +++ b/v2v/output_rhv_upload.ml
> @@ -248,6 +248,8 @@ object
> val mutable rhv_storagedomain_uuid = None
> (* The cluster UUID. *)
> val mutable rhv_cluster_uuid = None
> + (* The cluster CPU architecture *)
> + val mutable rhv_cluster_cpu_architecture = None
> (* List of disk UUIDs. *)
> val mutable disks_uuids = []
> (* If we didn't finish successfully, delete on exit. *)
> @@ -272,6 +274,8 @@ object
> Some (JSON_parser.object_get_string "rhv_storagedomain_uuid" json);
> rhv_cluster_uuid <-
> Some (JSON_parser.object_get_string "rhv_cluster_uuid" json);
> + rhv_cluster_cpu_architecture <-
> + Some (JSON_parser.object_get_string "rhv_cluster_cpu_architecture" json);
> if have_selinux then
> error_unless_nbdkit_compiled_with_selinux ()
>
> @@ -290,7 +294,19 @@ object
> (* rhev-apt.exe will be installed (if available). *)
> method install_rhev_apt = true
>
> - method prepare_targets source_name overlays _ =
> + method prepare_targets source_name overlays guestcaps =
> + let rhv_cluster_name =
> + match List.assoc "rhv_cluster" json_params with
> + | JSON.String s -> s
> + | _ -> assert false in
> + (match rhv_cluster_cpu_architecture with
> + | None -> assert false
> + | Some arch ->
> + if arch <> guestcaps.gcaps_arch then
> + error (f_"the cluster ‘%s’ does not support the architecture %s but %s")
> + rhv_cluster_name guestcaps.gcaps_arch arch
> + );
> +
> let uuids =
> match rhv_options.rhv_disk_uuids with
> | None ->
> diff --git a/v2v/rhv-upload-precheck.py b/v2v/rhv-upload-precheck.py
> index 5f33db98..ec3fcf4e 100644
> --- a/v2v/rhv-upload-precheck.py
> +++ b/v2v/rhv-upload-precheck.py
> @@ -92,11 +92,16 @@ if len(clusters) == 0:
> (params['rhv_cluster'], datacenter.name,
> params['output_storage']))
> cluster = clusters[0]
> +cpu = cluster.cpu
> +if cpu.architecture == types.Architecture.UNDEFINED:
> + raise RuntimeError("The cluster ‘%s’ has an unknown architecture" %
> + (params['rhv_cluster']))
>
> # Otherwise everything is OK, print a JSON with the results.
> results = {
> "rhv_storagedomain_uuid": storage_domain.id,
> "rhv_cluster_uuid": cluster.id,
> + "rhv_cluster_cpu_architecture": cpu.architecture.value,
> }
>
> json.dump(results, sys.stdout)
> --
ACK series, thanks.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines. Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top
More information about the Libguestfs
mailing list