Merge "Allow DependsOn to accept a list"
This commit is contained in:
commit
6e4d8fbcee
@ -280,13 +280,19 @@ class Resource(object):
|
|||||||
if key in ('DependsOn', 'Ref', 'Fn::GetAtt', 'get_attr',
|
if key in ('DependsOn', 'Ref', 'Fn::GetAtt', 'get_attr',
|
||||||
'get_resource'):
|
'get_resource'):
|
||||||
if key in ('Fn::GetAtt', 'get_attr'):
|
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]
|
||||||
|
|
||||||
|
for res in res_list:
|
||||||
try:
|
try:
|
||||||
target = self.stack[value]
|
target = self.stack[res]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise exception.InvalidTemplateReference(
|
raise exception.InvalidTemplateReference(
|
||||||
resource=value,
|
resource=res,
|
||||||
key=path)
|
key=path)
|
||||||
if key == 'DependsOn' or target.strict_dependency:
|
if key == 'DependsOn' or target.strict_dependency:
|
||||||
deps += (self, target)
|
deps += (self, target)
|
||||||
|
@ -1795,6 +1795,27 @@ class StackTest(HeatTestCase):
|
|||||||
for r in ['CResource', 'DResource']:
|
for r in ['CResource', 'DResource']:
|
||||||
self.assertIn(r, required_by)
|
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
|
@utils.stack_delete_after
|
||||||
def test_store_saves_owner(self):
|
def test_store_saves_owner(self):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user