Resolve data from Resource Facade
Since we are looking directly at the template data for the resource facade, we need to resolve any intrinsic functions that may be present. (For example, this would be expected if we ever had more than one level of provider templates, or if e.g. the DeletionPolicy was passed as parameter to the main stack). Closes-bug: #1299204 Change-Id: Iaae2fe7be6618c1dee84f2c90bdc179dc2be67d6
This commit is contained in:
@@ -527,9 +527,11 @@ class ResourceFacade(function.Function):
|
||||
if attr == self.METADATA:
|
||||
return self.stack.parent_resource.metadata
|
||||
elif attr == self.UPDATE_POLICY:
|
||||
return self.stack.parent_resource.t.get(attr, {})
|
||||
up = self.stack.parent_resource.t.get(attr, {})
|
||||
return function.resolve(up)
|
||||
elif attr == self.DELETION_POLICY:
|
||||
return self.stack.parent_resource.t.get(attr, 'Delete')
|
||||
dp = self.stack.parent_resource.t.get(attr, 'Delete')
|
||||
return function.resolve(dp)
|
||||
|
||||
|
||||
def function_mapping(version_key, version):
|
||||
|
||||
@@ -444,6 +444,27 @@ Mappings:
|
||||
self.assertEqual({"blarg": "wibble"},
|
||||
self.resolve(update_policy_snippet, stack.t, stack))
|
||||
|
||||
def test_resource_facade_function(self):
|
||||
deletion_policy_snippet = {'Fn::ResourceFacade': 'DeletionPolicy'}
|
||||
|
||||
class DummyClass(object):
|
||||
pass
|
||||
parent_resource = DummyClass()
|
||||
parent_resource.metadata = {"foo": "bar"}
|
||||
parent_resource.stack = parser.Stack(self.ctx, 'toplevel_stack',
|
||||
parser.Template({}))
|
||||
parent_snippet = {'DeletionPolicy': {'Fn::Join': ['eta',
|
||||
['R', 'in']]}}
|
||||
parent_tmpl = parent_resource.stack.t.parse(parent_resource.stack,
|
||||
parent_snippet)
|
||||
parent_resource.t = parent_tmpl
|
||||
|
||||
stack = parser.Stack(self.ctx, 'test_stack',
|
||||
parser.Template({}),
|
||||
parent_resource=parent_resource)
|
||||
self.assertEqual('Retain',
|
||||
self.resolve(deletion_policy_snippet, stack.t, stack))
|
||||
|
||||
def test_resource_facade_invalid_arg(self):
|
||||
snippet = {'Fn::ResourceFacade': 'wibble'}
|
||||
stack = parser.Stack(self.ctx, 'test_stack', parser.Template({}))
|
||||
|
||||
Reference in New Issue
Block a user