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:
Zane Bitter
2014-03-31 21:13:22 -04:00
parent 8356d27030
commit d8ecffda34
2 changed files with 25 additions and 2 deletions

View File

@@ -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):

View File

@@ -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({}))