Merge "Raise NotFound() when group member does not exist"

This commit is contained in:
Zuul 2017-10-20 10:27:09 +00:00 committed by Gerrit Code Review
commit 48c9a928e3
3 changed files with 13 additions and 8 deletions

View File

@ -14,6 +14,7 @@
import six import six
from heat.common import exception from heat.common import exception
from heat.common.i18n import _
def get_size(group, include_failed=False): def get_size(group, include_failed=False):
@ -69,7 +70,7 @@ def get_member_names(group):
return [r.name for r in get_members(group)] return [r.name for r in get_members(group)]
def get_resource(stack, resource_name, use_indices, key): def get_resource(stack, resource_name, use_indices, key=None):
nested_stack = stack.nested() nested_stack = stack.nested()
if not nested_stack: if not nested_stack:
return None return None
@ -79,18 +80,20 @@ def get_resource(stack, resource_name, use_indices, key):
else: else:
return nested_stack[resource_name] return nested_stack[resource_name]
except (IndexError, KeyError): except (IndexError, KeyError):
raise exception.InvalidTemplateAttribute(resource=stack.name, raise exception.NotFound(_("Member '%(mem)s' not found "
key=key) "in group resource '%(grp)s'.")
% {'mem': resource_name,
'grp': stack.name})
def get_rsrc_attr(stack, key, use_indices, resource_name, *attr_path): def get_rsrc_attr(stack, key, use_indices, resource_name, *attr_path):
resource = get_resource(stack, resource_name, use_indices, key) resource = get_resource(stack, resource_name, use_indices)
if resource: if resource:
return resource.FnGetAtt(*attr_path) return resource.FnGetAtt(*attr_path)
def get_rsrc_id(stack, key, use_indices, resource_name): def get_rsrc_id(stack, key, use_indices, resource_name):
resource = get_resource(stack, resource_name, use_indices, key) resource = get_resource(stack, resource_name, use_indices)
if resource: if resource:
return resource.FnGetRefId() return resource.FnGetRefId()

View File

@ -462,7 +462,7 @@ class HeatScalingGroupAttrTest(common.HeatTestCase):
mock_members.return_value = members mock_members.return_value = members
self.assertEqual(output[0], self.group.FnGetAtt('resource.0', 'Bar')) self.assertEqual(output[0], self.group.FnGetAtt('resource.0', 'Bar'))
self.assertEqual(output[1], self.group.FnGetAtt('resource.1.Bar')) self.assertEqual(output[1], self.group.FnGetAtt('resource.1.Bar'))
self.assertRaises(exception.InvalidTemplateAttribute, self.assertRaises(exception.NotFound,
self.group.FnGetAtt, 'resource.2') self.group.FnGetAtt, 'resource.2')

View File

@ -865,8 +865,10 @@ class ResourceGroupAttrTest(common.HeatTestCase):
resg = self._create_dummy_stack() resg = self._create_dummy_stack()
self.assertEqual("ID-0", resg.FnGetAtt('resource.0')) self.assertEqual("ID-0", resg.FnGetAtt('resource.0'))
self.assertEqual("ID-1", resg.FnGetAtt('resource.1')) self.assertEqual("ID-1", resg.FnGetAtt('resource.1'))
self.assertRaises(exception.InvalidTemplateAttribute, resg.FnGetAtt, ex = self.assertRaises(exception.NotFound, resg.FnGetAtt,
'resource.2') 'resource.2')
self.assertIn("Member '2' not found in group resource 'group1'.",
six.text_type(ex))
@mock.patch.object(grouputils, 'get_rsrc_id') @mock.patch.object(grouputils, 'get_rsrc_id')
def test_get_attribute(self, mock_get_rsrc_id): def test_get_attribute(self, mock_get_rsrc_id):