diff options
author | Randall Burt <randall.burt@rackspace.com> | 2015-04-03 15:17:07 -0500 |
---|---|---|
committer | Randall Burt <randall.burt@rackspace.com> | 2015-04-03 15:17:39 -0500 |
commit | c0f3f851c3787fc95fa450430db7a52314ee6d01 (patch) | |
tree | e5aa9d6bd153ff507452d46a8c167e0fb56af6bc | |
parent | 56f1905279c735a9cc26d80a2905f6dc8933e8dc (diff) | |
download | heat-c0f3f851c3787fc95fa450430db7a52314ee6d01.tar.gz |
Do not resolve neutron resource attributes when resource_id is None
Also, fix the test to correctly account for NotFound as well as
this new case.
Closes-Bug: 1440189
Change-Id: I31004c11af71e32a4388fd44cd8b98df8afbd1a5
-rw-r--r-- | heat/engine/resources/openstack/neutron/neutron.py | 19 | ||||
-rw-r--r-- | heat/tests/neutron/test_neutron.py | 6 |
2 files changed, 16 insertions, 9 deletions
diff --git a/heat/engine/resources/openstack/neutron/neutron.py b/heat/engine/resources/openstack/neutron/neutron.py index 926161749..17b4dc206 100644 --- a/heat/engine/resources/openstack/neutron/neutron.py +++ b/heat/engine/resources/openstack/neutron/neutron.py @@ -119,15 +119,16 @@ class NeutronResource(resource.Resource): result=_('Resource is not built')) def _resolve_attribute(self, name): - try: - attributes = self._show_resource() - except Exception as ex: - self.client_plugin().ignore_not_found(ex) - return None - if name == 'show': - return attributes - - return attributes[name] + if self.resource_id: + try: + attributes = self._show_resource() + except Exception as ex: + self.client_plugin().ignore_not_found(ex) + return None + if name == 'show': + return attributes + + return attributes[name] def FnGetRefId(self): return six.text_type(self.resource_id) diff --git a/heat/tests/neutron/test_neutron.py b/heat/tests/neutron/test_neutron.py index 5dc201816..9b55e1f5e 100644 --- a/heat/tests/neutron/test_neutron.py +++ b/heat/tests/neutron/test_neutron.py @@ -17,6 +17,7 @@ from neutronclient.v2_0 import client as neutronclient import six from heat.common import exception +from heat.engine.clients.os import neutron from heat.engine.hot import functions from heat.engine import properties from heat.engine import resource @@ -114,14 +115,19 @@ class NeutronTest(common.HeatTestCase): mock_show_resource.side_effect = [{'attr1': 'val1', 'attr2': 'val2'}, {'attr1': 'val1', 'attr2': 'val2'}, {'attr1': 'val1', 'attr2': 'val2'}, + qe.NotFound, qe.NeutronClientException] res._show_resource = mock_show_resource + nclientplugin = neutron.NeutronClientPlugin(mock.MagicMock()) + res.client_plugin = mock.Mock(return_value=nclientplugin) self.assertEqual({'attr1': 'val1', 'attr2': 'val2'}, res._resolve_attribute('show')) self.assertEqual('val2', res._resolve_attribute('attr2')) self.assertRaises(KeyError, res._resolve_attribute, 'attr3') self.assertIsNone(res._resolve_attribute('attr2')) + res.resource_id = None + self.assertIsNone(res._resolve_attribute('show')) class GetSecGroupUuidTest(common.HeatTestCase): |