From e84581678f6753584c8d968965408134789e2c57 Mon Sep 17 00:00:00 2001 From: Fabian Wiesel Date: Thu, 7 Aug 2025 09:56:32 +0200 Subject: [PATCH] vmwareapi: Normalize image_metadata with VMwareImage By using VMwareImage we have less places of normalization of defaults. Followup to Change-Id: I28c439dc612bc2ddae3b564c0d2cae8f5207bfc4 Change-Id: I7b1f251ffaa90beec768a2f044e15a39aaf9527f --- nova/tests/unit/virt/vmwareapi/test_vmops.py | 4 ++- nova/virt/vmwareapi/vmops.py | 28 +++++++++++--------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/nova/tests/unit/virt/vmwareapi/test_vmops.py b/nova/tests/unit/virt/vmwareapi/test_vmops.py index 139341711ee..be90e10ad7d 100644 --- a/nova/tests/unit/virt/vmwareapi/test_vmops.py +++ b/nova/tests/unit/virt/vmwareapi/test_vmops.py @@ -1704,6 +1704,7 @@ def test_migrate_disk_and_power_off_rejects_version(self): self._context, self._instance_values, dest, self._flavor, None, None) + @mock.patch.object(images.VMwareImage, 'from_image') @mock.patch.object(vm_util, 'rename_vm') @mock.patch.object(objects.MigrationContext, 'get_by_instance_uuid') @mock.patch.object(vmops.VMwareVMOps, '_get_project_folder') @@ -1724,7 +1725,8 @@ def _test_do_migrate_disk(self, fake_migration_get, fake_call_method, fake_change_uuid, fake_get_dc_ref_name, fake_get_project_folder, fake_migration_context_get, - fake_rename_vm, dest, change_uuid_fails=False): + fake_rename_vm, fake_from_image, + dest, change_uuid_fails=False): vm_ref = mock.sentinel.vm_ref folder_ref = mock.sentinel.folder diff --git a/nova/virt/vmwareapi/vmops.py b/nova/virt/vmwareapi/vmops.py index ebf3e0d83bb..eeeaa4ccde9 100644 --- a/nova/virt/vmwareapi/vmops.py +++ b/nova/virt/vmwareapi/vmops.py @@ -3060,9 +3060,10 @@ def _get_vm_networking_spec(self, instance, network_info): config_spec = client_factory.create('ns0:VirtualMachineConfigSpec') extra_specs = self._get_extra_specs(instance.flavor, instance.image_meta) - vif_model = instance.image_meta.properties.get('hw_vif_model', - constants.DEFAULT_VIF_MODEL) + image_meta = instance.image_meta + image_info = images.VMwareImage.from_image(None, None, image_meta) + vif_model = image_info.vif_model vm_util.append_vif_infos_to_config_spec( client_factory, config_spec, @@ -3073,10 +3074,11 @@ def _get_vm_networking_spec(self, instance, network_info): def _relocate_vm(self, vm_ref, context, instance, network_info, image_meta=None): image_meta = image_meta or instance.image_meta + image_info = images.VMwareImage.from_image(None, None, image_meta) + storage_policy = self._get_storage_policy(instance.flavor) allowed_ds_types = ds_util.get_allowed_datastore_types( - image_meta.properties.get('hw_disk_type', - constants.DEFAULT_DISK_TYPE)) + image_info.disk_type) hagroup_re, hagroup = self._get_hagroup_info(context, instance) datastore = ds_util.get_datastore(self._session, self._cluster, self._datastore_regex, @@ -3093,18 +3095,17 @@ def _relocate_vm(self, vm_ref, context, instance, network_info, res_pool=self._root_resource_pool, folder=folder, datastore=datastore.ref) spec.deviceChange = self._get_network_device_change(vm_ref, - image_meta, + image_info, network_info) vm_util.relocate_vm(self._session, vm_ref, spec=spec) - def _get_network_device_change(self, vm_ref, image_meta, network_info): + def _get_network_device_change(self, vm_ref, image_info, network_info): device_changes = [] if not network_info: return device_changes # Iterate over the network adapters and update the backing - vif_model = image_meta.properties.get('hw_vif_model', - constants.DEFAULT_VIF_MODEL) + vif_model = image_info.vif_model hardware_devices = vm_util.get_hardware_devices(self._session, vm_ref) vif_infos = vmwarevif.get_vif_info(self._session, self._cluster, @@ -3526,10 +3527,10 @@ def get_relocate_spec(self, context, instance, flavor, service_spec = self._get_service_locator_spec() image_meta = instance.image_meta + image_info = images.VMwareImage.from_image(None, None, image_meta) storage_policy = self._get_storage_policy(flavor) allowed_ds_types = ds_util.get_allowed_datastore_types( - image_meta.properties.get('hw_disk_type', - constants.DEFAULT_DISK_TYPE)) + image_info.disk_type) res_pool = vm_util.get_res_pool_ref(session, cluster) datastore = ds_util.get_datastore(session, cluster, self._datastore_regex, @@ -4869,9 +4870,12 @@ def update_server_group_hagroup_disk_placement(self, context, sg_uuid): "but should be on %s. Trying to remedy.", instance.uuid, sg_uuid, current_hagroup, hagroup) storage_policy = self._get_storage_policy(instance.flavor) + + image_meta = instance.image_meta + image_info = images.VMwareImage.from_image(None, None, image_meta) + allowed_ds_types = ds_util.get_allowed_datastore_types( - instance.image_meta.properties.get( - 'hw_disk_type', constants.DEFAULT_DISK_TYPE)) + image_info.disk_type) datastore = ds_util.get_datastore(self._session, self._cluster, self._datastore_regex,