Merge "Allow DependsOn to accept a list"

This commit is contained in:
Jenkins 2013-10-15 09:51:36 +00:00 committed by Gerrit Code Review
commit 6e4d8fbcee
2 changed files with 36 additions and 9 deletions

View File

@ -280,16 +280,22 @@ class Resource(object):
if key in ('DependsOn', 'Ref', 'Fn::GetAtt', 'get_attr',
'get_resource'):
if key in ('Fn::GetAtt', 'get_attr'):
value, att = value
res_name, att = value
res_list = [res_name]
elif key == 'DependsOn' and isinstance(value, list):
res_list = value
else:
res_list = [value]
try:
target = self.stack[value]
except KeyError:
raise exception.InvalidTemplateReference(
resource=value,
key=path)
if key == 'DependsOn' or target.strict_dependency:
deps += (self, target)
for res in res_list:
try:
target = self.stack[res]
except KeyError:
raise exception.InvalidTemplateReference(
resource=res,
key=path)
if key == 'DependsOn' or target.strict_dependency:
deps += (self, target)
else:
self._add_dependencies(deps, '%s.%s' % (path, key), value)
elif isinstance(fragment, list):

View File

@ -1795,6 +1795,27 @@ class StackTest(HeatTestCase):
for r in ['CResource', 'DResource']:
self.assertIn(r, required_by)
@utils.stack_delete_after
def test_resource_multi_required_by(self):
tmpl = {'Resources': {'AResource': {'Type': 'GenericResourceType'},
'BResource': {'Type': 'GenericResourceType'},
'CResource': {'Type': 'GenericResourceType'},
'DResource': {'Type': 'GenericResourceType',
'DependsOn': ['AResource',
'BResource',
'CResource']}}}
self.stack = parser.Stack(self.ctx, 'depends_test_stack',
template.Template(tmpl))
self.stack.store()
self.stack.create()
self.assertEqual(self.stack.state,
(parser.Stack.CREATE, parser.Stack.COMPLETE))
for r in ['AResource', 'BResource', 'CResource']:
self.assertEqual(['DResource'],
self.stack[r].required_by())
@utils.stack_delete_after
def test_store_saves_owner(self):
"""