diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index 6867699229..f9c91c4f41 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -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) diff --git a/lib/ansible/utils.py b/lib/ansible/utils.py index a29f7ea254..fefdb87df1 100644 --- a/lib/ansible/utils.py +++ b/lib/ansible/utils.py @@ -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 '''