Run templating function until the text doesn't change

This allows variables to contain other variables.
parent ce838e07
...@@ -648,7 +648,7 @@ class Runner(object): ...@@ -648,7 +648,7 @@ class Runner(object):
inject.update(host_variables) inject.update(host_variables)
inject.update(self.module_vars) inject.update(self.module_vars)
conditional = utils.double_template(self.conditional, inject, self.setup_cache) conditional = utils.template(self.conditional, inject, self.setup_cache)
if not eval(conditional): if not eval(conditional):
result = utils.smjson(dict(skipped=True)) result = utils.smjson(dict(skipped=True))
self.callbacks.on_skipped(host) self.callbacks.on_skipped(host)
......
...@@ -265,7 +265,7 @@ def varReplace(raw, vars): ...@@ -265,7 +265,7 @@ def varReplace(raw, vars):
return ''.join(done) return ''.join(done)
def template(text, vars, setup_cache=None, no_engine=True): def _template(text, vars, setup_cache=None, no_engine=True):
''' run a text buffer through the templating engine ''' ''' run a text buffer through the templating engine '''
vars = vars.copy() vars = vars.copy()
vars['hostvars'] = setup_cache vars['hostvars'] = setup_cache
...@@ -281,8 +281,14 @@ def template(text, vars, setup_cache=None, no_engine=True): ...@@ -281,8 +281,14 @@ def template(text, vars, setup_cache=None, no_engine=True):
res = res + '\n' res = res + '\n'
return res return res
def double_template(text, vars, setup_cache): def template(text, vars, setup_cache=None, no_engine=True):
return template(template(text, vars, setup_cache), vars, setup_cache) ''' run a text buffer through the templating engine
until it no longer changes '''
prev_text = ''
while prev_text != text:
prev_text = text
text = _template(text, vars, setup_cache, no_engine)
return text
def template_from_file(path, vars, setup_cache, no_engine=True): def template_from_file(path, vars, setup_cache, no_engine=True):
''' run a file through the templating engine ''' ''' run a file through the templating engine '''
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment