Fix correct variable expansion in includes only_if.

There's not need to run the complete include through the templating engine.
Several variables were not included before the conditional was evaluated.
This commit is contained in:
Jeroen Hoekx 2012-05-11 15:06:34 +02:00
parent dab50574e0
commit cd9f926b5f
6 changed files with 61 additions and 6 deletions

View file

@ -160,8 +160,7 @@ class PlayBook(object):
include_vars[k] = v
inject_vars = play_vars.copy()
inject_vars.update(include_vars)
included = utils.template_from_file(path, inject_vars, SETUP_CACHE, no_engine=True)
included = utils.parse_yaml(included)
included = utils.parse_yaml_from_file(path)
for x in included:
if len(include_vars):
x["vars"] = include_vars

View file

@ -262,14 +262,15 @@ class Runner(object):
async_jid=None, async_module=None, async_limit=None):
''' runs a module that has already been transferred '''
inject = self.setup_cache.get(conn.host,{})
inject = self.setup_cache.get(conn.host,{}).copy()
host_variables = self.inventory.get_variables(conn.host)
inject.update(host_variables)
inject.update(self.module_vars)
conditional = utils.double_template(self.conditional, inject, self.setup_cache)
if not eval(conditional):
return [ utils.smjson(dict(skipped=True)), None, 'skipped' ]
host_variables = self.inventory.get_variables(conn.host)
inject.update(host_variables)
if self.module_name == 'setup':
args = self._add_setup_vars(inject, args)
args = self._add_setup_metadata(args)

View file

@ -172,3 +172,28 @@ class TestPlaybook(unittest.TestCase):
print data
assert data.find("ears") != -1, "template success"
def test_includes(self):
pb = os.path.join(self.test_dir, 'playbook_includes.yml')
actual = self._run(pb)
for i, event in enumerate(EVENTS):
print "EVENT %s"%(i)
print event
if i == 6:
assert 'blue' in event[1][1]['cmd']
if i == 8:
assert 'quack' in event[1][1]['cmd']
if i == 10:
assert 'RAN' in event[1][1]['cmd']
if i == 12:
assert 'RAN' in event[1][1]['cmd']
if i == 14:
assert 'red' in event[1][1]['cmd']
if i == 18 or i == 20:
assert 'skipped' in event[0]

View file

@ -1,3 +1,4 @@
---
duck: quack
cow: moo
extguard: " '$favcolor' == 'blue' "

View file

@ -0,0 +1,14 @@
---
- name: test vars
action: shell echo $favcolor
- name: test vars_files
action: shell echo $duck
- name: test vars condition
action: shell echo RAN
only_if: $guard
- name: test vars_files condition
action: shell echo RAN
only_if: $extguard

View file

@ -0,0 +1,15 @@
---
# Test correct variable expansion in included files and only if
- hosts: all
vars:
favcolor: "blue"
guard: ' "$favcolor" == "blue" '
vars_files:
- common_vars.yml
tasks:
- include: playbook_included.yml
# test overrides of variables
- include: playbook_included.yml favcolor=red