Allow conditions to return null values

Change-Id: I44ec701319786a4f8f64e04d77c6a31bb2de1d20
Closes-Bug: #1709620
This commit is contained in:
rabi 2017-08-11 13:43:22 +05:30 committed by Steven Hardy
parent ffbe970a4b
commit 44c188c80f
2 changed files with 59 additions and 0 deletions

View File

@ -246,6 +246,8 @@ class Macro(Function):
"""
if isinstance(self.parsed, Function):
return self.parsed.__reduce__()
if self.parsed is None:
return lambda x: None, (None,)
return type(self.parsed), (self.parsed,)
def _repr_result(self):

View File

@ -1413,6 +1413,15 @@ class HOTemplateTest(common.HeatTestCase):
resolved = self.resolve(snippet, tmpl, stack)
self.assertEqual('value_if_false', resolved)
def test_if_null_return(self):
snippet = {'if': [True, None, 'value_if_false']}
# when condition is true, if function resolve to value_if_true
tmpl = template.Template(hot_newton_tpl_empty)
stack = parser.Stack(utils.dummy_context(),
'test_if_null_return', tmpl)
resolved = self.resolve(snippet, tmpl, stack)
self.assertIsNone(resolved)
def test_if_using_condition_function(self):
tmpl_with_conditions = template_format.parse('''
heat_template_version: 2016-10-14
@ -1429,6 +1438,54 @@ conditions:
resolved = self.resolve(snippet, tmpl, stack)
self.assertEqual('value_if_true', resolved)
def test_if_referenced_by_resource(self):
tmpl_with_conditions = template_format.parse('''
heat_template_version: pike
conditions:
create_prod: False
resources:
AResource:
type: ResourceWithPropsType
properties:
Foo:
if:
- create_prod
- "one"
- "two"
''')
tmpl = template.Template(tmpl_with_conditions)
self.stack = parser.Stack(utils.dummy_context(),
'test_if_referenced_by_resource', tmpl)
self.stack.store()
self.stack.create()
self.assertEqual((parser.Stack.CREATE, parser.Stack.COMPLETE),
self.stack.state)
self.assertEqual('two', self.stack['AResource'].properties['Foo'])
def test_if_referenced_by_resource_null(self):
tmpl_with_conditions = template_format.parse('''
heat_template_version: pike
conditions:
create_prod: True
resources:
AResource:
type: ResourceWithPropsType
properties:
Foo:
if:
- create_prod
- null
- "two"
''')
tmpl = template.Template(tmpl_with_conditions)
self.stack = parser.Stack(utils.dummy_context(),
'test_if_referenced_by_resource_null', tmpl)
self.stack.store()
self.stack.create()
self.assertEqual((parser.Stack.CREATE, parser.Stack.COMPLETE),
self.stack.state)
self.assertEqual('', self.stack['AResource'].properties['Foo'])
def test_if_invalid_args(self):
snippet = {'if': ['create_prod', 'one_value']}
tmpl = template.Template(hot_newton_tpl_empty)