Merge "Should execute 'resolve' before check the values of 'for_each'"

This commit is contained in:
Jenkins 2015-07-15 09:12:46 +00:00 committed by Gerrit Code Review
commit a16cbefc3e
2 changed files with 15 additions and 8 deletions

View File

@ -343,7 +343,7 @@ class Repeat(function.Function):
self.fn_name) self.fn_name)
try: try:
for_each = self.args['for_each'] for_each = function.resolve(self.args['for_each'])
template = self.args['template'] template = self.args['template']
except (KeyError, TypeError): except (KeyError, TypeError):
example = ('''repeat: example = ('''repeat:
@ -377,9 +377,8 @@ class Repeat(function.Function):
for (k, v) in template.items()) for (k, v) in template.items())
def result(self): def result(self):
for_each = function.resolve(self._for_each) keys = list(six.iterkeys(self._for_each))
keys = list(six.iterkeys(for_each)) lists = [self._for_each[key] for key in keys]
lists = [for_each[key] for key in keys]
template = function.resolve(self._template) template = function.resolve(self._template)
return [self._do_replacement(keys, items, template) return [self._do_replacement(keys, items, template)
for items in itertools.product(*lists)] for items in itertools.product(*lists)]

View File

@ -628,13 +628,21 @@ class HOTemplateTest(common.HeatTestCase):
def test_repeat(self): def test_repeat(self):
"""Test repeat function.""" """Test repeat function."""
snippet = {'repeat': {'template': 'this is %var%', hot_tpl = template_format.parse('''
'for_each': {'%var%': ['a', 'b', 'c']}}} heat_template_version: 2015-04-30
parameters:
param:
type: comma_delimited_list
default: 'a,b,c'
''')
snippet = {'repeat': {'template': 'this is var%',
'for_each': {'var%': {'get_param': 'param'}}}}
snippet_resolved = ['this is a', 'this is b', 'this is c'] snippet_resolved = ['this is a', 'this is b', 'this is c']
tmpl = template.Template(hot_kilo_tpl_empty) tmpl = template.Template(hot_tpl)
stack = parser.Stack(utils.dummy_context(), 'test_stack', tmpl)
self.assertEqual(snippet_resolved, self.resolve(snippet, tmpl)) self.assertEqual(snippet_resolved, self.resolve(snippet, tmpl, stack))
def test_repeat_dict_template(self): def test_repeat_dict_template(self):
"""Test repeat function with a dictionary as a template.""" """Test repeat function with a dictionary as a template."""