[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