From 419096ec19cc3538243c232d781a5ca6205475ea Mon Sep 17 00:00:00 2001 From: Gary Kotton Date: Mon, 20 Oct 2014 06:37:14 -0700 Subject: [PATCH] VMware: fix compute node exception when no hosts in cluster Commit 4033c0c9c16d2844b36fd5627717e7ce206887f6 casues the regression. The result was a empty string and not None. That is suds returns a Text object and not None. Change-Id: I79e70e300f40eb3561cf56478d578f0f8cda273e Closes-bug: #1383305 --- nova/tests/virt/vmwareapi/test_ds_util.py | 10 ++++++++++ nova/virt/vmwareapi/ds_util.py | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/nova/tests/virt/vmwareapi/test_ds_util.py b/nova/tests/virt/vmwareapi/test_ds_util.py index 6314620127d2..0ad8ef213d1e 100644 --- a/nova/tests/virt/vmwareapi/test_ds_util.py +++ b/nova/tests/virt/vmwareapi/test_ds_util.py @@ -311,6 +311,16 @@ class DsUtilTestCase(test.NoDBTestCase): ds_util.get_datastore, self.session, 'fake-cluster') + def test_get_datastore_no_host_in_cluster(self): + def fake_call_method(module, method, *args, **kwargs): + return '' + + with mock.patch.object(self.session, '_call_method', + fake_call_method): + self.assertRaises(exception.DatastoreNotFound, + ds_util.get_datastore, + self.session, 'fake-cluster') + def _test_is_datastore_valid(self, accessible=True, maintenance_mode="normal", type="VMFS", diff --git a/nova/virt/vmwareapi/ds_util.py b/nova/virt/vmwareapi/ds_util.py index 0f633a77bd91..025828afb28d 100644 --- a/nova/virt/vmwareapi/ds_util.py +++ b/nova/virt/vmwareapi/ds_util.py @@ -248,7 +248,9 @@ def get_datastore(session, cluster, datastore_regex=None): vim_util, "get_dynamic_property", cluster, "ClusterComputeResource", "datastore") - if datastore_ret is None: + # If there are no hosts in the cluster then an empty string is + # returned + if not datastore_ret: raise exception.DatastoreNotFound() data_store_mors = datastore_ret.ManagedObjectReference