Allow conditions to return null values
Change-Id: I44ec701319786a4f8f64e04d77c6a31bb2de1d20 Closes-Bug: #1709620
This commit is contained in:
parent
ffbe970a4b
commit
44c188c80f
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue