From 13171d6bdce9422cf5bad5d328797cef4c6657e7 Mon Sep 17 00:00:00 2001 From: Gary Kotton Date: Sun, 12 Oct 2014 08:07:57 -0700 Subject: [PATCH] VMware: remove ESX support for getting resource pool The ESX driver is no longer supported. We should only return the resource pool for the cluster. In order to test this the patch had to update the test_vmops to ensure that a cluster was used. The patch also drops the method get_mo_id_from_instance which is no longer used. Change-Id: I9d99a5be58ef5a2a7d41dfd488ac24f38d2c79d3 --- nova/tests/unit/virt/vmwareapi/fake.py | 1 + nova/tests/unit/virt/vmwareapi/test_vmops.py | 40 ++++++++++---------- nova/virt/vmwareapi/vm_util.py | 37 ++++-------------- nova/virt/vmwareapi/vmops.py | 3 +- 4 files changed, 28 insertions(+), 53 deletions(-) diff --git a/nova/tests/unit/virt/vmwareapi/fake.py b/nova/tests/unit/virt/vmwareapi/fake.py index 5bd2b7fb4f..c158405a2a 100644 --- a/nova/tests/unit/virt/vmwareapi/fake.py +++ b/nova/tests/unit/virt/vmwareapi/fake.py @@ -951,6 +951,7 @@ def create_cluster(name, ds_ref): cluster._add_datastore(ds_ref) cluster._add_root_resource_pool(create_res_pool()) _create_object('ClusterComputeResource', cluster) + return cluster def create_vm(uuid=None, name=None, diff --git a/nova/tests/unit/virt/vmwareapi/test_vmops.py b/nova/tests/unit/virt/vmwareapi/test_vmops.py index 2dd188af48..388ef94cff 100644 --- a/nova/tests/unit/virt/vmwareapi/test_vmops.py +++ b/nova/tests/unit/virt/vmwareapi/test_vmops.py @@ -61,22 +61,7 @@ class VMwareVMOpsTestCase(test.NoDBTestCase): self._session = driver.VMwareAPISession() self._virtapi = mock.Mock() - self._vmops = vmops.VMwareVMOps(self._session, self._virtapi, None) - self._image_id = nova.tests.unit.image.fake.get_valid_image_id() - self._instance_values = { - 'name': 'fake_name', - 'uuid': 'fake_uuid', - 'vcpus': 1, - 'memory_mb': 512, - 'image_ref': self._image_id, - 'root_gb': 10, - 'node': 'respool-1001(MyResPoolName)', - 'expected_attrs': ['system_metadata'], - } - self._instance = fake_instance.fake_instance_obj( - self._context, **self._instance_values) - fake_ds_ref = vmwareapi_fake.ManagedObjectReference('fake-ds') self._ds = ds_util.Datastore( ref=fake_ds_ref, name='fake_ds', @@ -85,6 +70,23 @@ class VMwareVMOpsTestCase(test.NoDBTestCase): self._dc_info = vmops.DcInfo( ref='fake_dc_ref', name='fake_dc', vmFolder='fake_vm_folder') + cluster = vmwareapi_fake.create_cluster('fake_cluster', fake_ds_ref) + self._instance_values = { + 'name': 'fake_name', + 'uuid': 'fake_uuid', + 'vcpus': 1, + 'memory_mb': 512, + 'image_ref': self._image_id, + 'root_gb': 10, + 'node': '%s(%s)' % (cluster.mo_id, cluster.name), + 'expected_attrs': ['system_metadata'], + } + self._instance = fake_instance.fake_instance_obj( + self._context, **self._instance_values) + + self._vmops = vmops.VMwareVMOps(self._session, self._virtapi, None, + cluster=cluster.obj) + self._cluster = cluster subnet_4 = network_model.Subnet(cidr='192.168.0.1/24', dns=[network_model.IP('192.168.0.1')], @@ -760,8 +762,6 @@ class VMwareVMOpsTestCase(test.NoDBTestCase): @mock.patch('nova.virt.vmwareapi.ds_util.get_datastore') @mock.patch( 'nova.virt.vmwareapi.vmops.VMwareVMOps.get_datacenter_ref_and_name') - @mock.patch('nova.virt.vmwareapi.vm_util.get_mo_id_from_instance', - return_value='fake_node_mo_id') @mock.patch('nova.virt.vmwareapi.vm_util.get_res_pool_ref', return_value='fake_rp_ref') @mock.patch('nova.virt.vmwareapi.vif.get_vif_info', @@ -793,7 +793,6 @@ class VMwareVMOpsTestCase(test.NoDBTestCase): mock_is_neutron, mock_get_vif_info, mock_get_res_pool_ref, - mock_get_mo_id_for_instance, mock_get_datacenter_ref_and_name, mock_get_datastore, mock_configure_config_drive, @@ -846,11 +845,10 @@ class VMwareVMOpsTestCase(test.NoDBTestCase): self.assertEqual(expected_mkdir_calls, len(mock_mkdir.mock_calls)) - mock_get_mo_id_for_instance.assert_called_once_with(self._instance) mock_get_res_pool_ref.assert_called_once_with( - self._session, None, 'fake_node_mo_id') + self._session, self._cluster.obj) mock_get_vif_info.assert_called_once_with( - self._session, None, False, + self._session, self._cluster.obj, False, constants.DEFAULT_VIF_MODEL, network_info) mock_get_create_spec.assert_called_once_with( self._session.vim.client.factory, diff --git a/nova/virt/vmwareapi/vm_util.py b/nova/virt/vmwareapi/vm_util.py index c4054e296d..80f148e12e 100644 --- a/nova/virt/vmwareapi/vm_util.py +++ b/nova/virt/vmwareapi/vm_util.py @@ -1057,25 +1057,14 @@ def get_vmdk_volume_disk(hardware_devices, path=None): return device -def get_res_pool_ref(session, cluster, node_mo_id): +def get_res_pool_ref(session, cluster): """Get the resource pool.""" - if cluster is None: - # With no cluster named, use the root resource pool. - results = session._call_method(vim_util, "get_objects", - "ResourcePool") - _cancel_retrieve_if_necessary(session, results) - # The 0th resource pool is always the root resource pool on both ESX - # and vCenter. - res_pool_ref = results.objects[0].obj - else: - if cluster.value == node_mo_id: - # Get the root resource pool of the cluster - res_pool_ref = session._call_method(vim_util, - "get_dynamic_property", - cluster, - "ClusterComputeResource", - "resourcePool") - + # Get the root resource pool of the cluster + res_pool_ref = session._call_method(vim_util, + "get_dynamic_property", + cluster, + "ClusterComputeResource", + "resourcePool") return res_pool_ref @@ -1176,18 +1165,6 @@ def get_dict_mor(session, list_obj): return dict_mors -def get_mo_id_from_instance(instance): - """Return the managed object ID from the instance. - - The instance['node'] will have the hypervisor_hostname field of the - compute node on which the instance exists or will be provisioned. - This will be of the form - 'respool-1001(MyResPoolName)' - 'domain-1001(MyClusterName)' - """ - return instance['node'].partition('(')[0] - - def get_vmdk_adapter_type(adapter_type): """Return the adapter type to be used in vmdk descriptor. diff --git a/nova/virt/vmwareapi/vmops.py b/nova/virt/vmwareapi/vmops.py index aec7f1df80..e4c293d1af 100644 --- a/nova/virt/vmwareapi/vmops.py +++ b/nova/virt/vmwareapi/vmops.py @@ -230,9 +230,8 @@ class VMwareVMOps(object): def build_virtual_machine(self, instance, instance_name, image_info, dc_info, datastore, network_info, flavor): - node_mo_id = vm_util.get_mo_id_from_instance(instance) res_pool_ref = vm_util.get_res_pool_ref(self._session, - self._cluster, node_mo_id) + self._cluster) vif_infos = vmwarevif.get_vif_info(self._session, self._cluster, utils.is_neutron(),