Run templating function until the text doesn't change

This allows variables to contain other variables.
This commit is contained in:
Daniel Hokka Zakrisson 2012-06-09 18:40:17 +02:00
parent ce838e0755
commit 545b4b63d8
2 changed files with 10 additions and 4 deletions

View file

@ -648,7 +648,7 @@ class Runner(object):
inject.update(host_variables)
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):
result = utils.smjson(dict(skipped=True))
self.callbacks.on_skipped(host)

View file

@ -265,7 +265,7 @@ def varReplace(raw, vars):
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 '''
vars = vars.copy()
vars['hostvars'] = setup_cache
@ -281,8 +281,14 @@ def template(text, vars, setup_cache=None, no_engine=True):
res = res + '\n'
return res
def double_template(text, vars, setup_cache):
return template(template(text, vars, setup_cache), vars, setup_cache)
def template(text, vars, setup_cache=None, no_engine=True):
''' 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):
''' run a file through the templating engine '''