From d126457386694cc961833f1bef66167e8c3ecfc3 Mon Sep 17 00:00:00 2001 From: Gary Kotton Date: Tue, 18 Nov 2014 05:02:02 -0800 Subject: [PATCH] VMware: support passing flavor object in spawn Makes use of the flavor, if defined, passed by the spawn method. This saves a database call. Change-Id: I7ba648a37306ce97cd8ae20e7d2a44c0cf7fc479 --- nova/tests/unit/virt/vmwareapi/test_driver_api.py | 5 +++-- nova/virt/vmwareapi/driver.py | 3 ++- nova/virt/vmwareapi/vmops.py | 10 ++++++---- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/nova/tests/unit/virt/vmwareapi/test_driver_api.py b/nova/tests/unit/virt/vmwareapi/test_driver_api.py index 1160f325ba15..b43afbddfaf7 100644 --- a/nova/tests/unit/virt/vmwareapi/test_driver_api.py +++ b/nova/tests/unit/virt/vmwareapi/test_driver_api.py @@ -719,12 +719,13 @@ class VMwareAPIVMTestCase(test.NoDBTestCase): def _fake_spawn(context, instance, image_meta, injected_files, admin_password, network_info, block_device_info=None, - instance_name=None, power_on=True): + instance_name=None, power_on=True, flavor=None): return self._spawn(context, instance, image_meta, injected_files, admin_password, network_info, block_device_info=block_device_info, instance_name=instance_name, - power_on=self._power_on) + power_on=self._power_on, + flavor=flavor) with ( mock.patch.object(self.conn._vmops, 'spawn', _fake_spawn) diff --git a/nova/virt/vmwareapi/driver.py b/nova/virt/vmwareapi/driver.py index d86161d428bc..1fd92c56a637 100644 --- a/nova/virt/vmwareapi/driver.py +++ b/nova/virt/vmwareapi/driver.py @@ -485,7 +485,8 @@ class VMwareVCDriver(driver.ComputeDriver): """Create VM instance.""" _vmops = self._get_vmops_for_compute_node(instance['node']) _vmops.spawn(context, instance, image_meta, injected_files, - admin_password, network_info, block_device_info) + admin_password, network_info, block_device_info, + flavor=flavor) def attach_volume(self, context, connection_info, instance, mountpoint, disk_bus=None, device_type=None, encryption=None): diff --git a/nova/virt/vmwareapi/vmops.py b/nova/virt/vmwareapi/vmops.py index d8d7a60442dd..411deca0c404 100644 --- a/nova/virt/vmwareapi/vmops.py +++ b/nova/virt/vmwareapi/vmops.py @@ -516,15 +516,17 @@ class VMwareVMOps(object): def spawn(self, context, instance, image_meta, injected_files, admin_password, network_info, block_device_info=None, - instance_name=None, power_on=True): + instance_name=None, power_on=True, + flavor=None): client_factory = self._session.vim.client.factory image_info = images.VMwareImage.from_image(instance.image_ref, image_meta) # Read flavors for extra_specs - flavor = objects.Flavor.get_by_id( - nova_context.get_admin_context(read_deleted='yes'), - instance.instance_type_id) + if flavor is None: + flavor = objects.Flavor.get_by_id( + nova_context.get_admin_context(read_deleted='yes'), + instance.instance_type_id) extra_specs = self._get_extra_specs(flavor)