summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandall Burt <randall.burt@rackspace.com>2015-04-03 15:17:07 -0500
committerRandall Burt <randall.burt@rackspace.com>2015-04-03 15:17:39 -0500
commitc0f3f851c3787fc95fa450430db7a52314ee6d01 (patch)
treee5aa9d6bd153ff507452d46a8c167e0fb56af6bc
parent56f1905279c735a9cc26d80a2905f6dc8933e8dc (diff)
downloadheat-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.py19
-rw-r--r--heat/tests/neutron/test_neutron.py6
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):