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 8d567bfe16..2f852d6df0 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 7d90b944c5..a89b546f97 100644 --- a/nova/virt/vmwareapi/vmops.py +++ b/nova/virt/vmwareapi/vmops.py @@ -229,9 +229,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(),