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:
parent
4e65b537da
commit
b1da61ae92
6 changed files with 61 additions and 6 deletions
|
@ -160,8 +160,7 @@ class PlayBook(object):
|
||||||
include_vars[k] = v
|
include_vars[k] = v
|
||||||
inject_vars = play_vars.copy()
|
inject_vars = play_vars.copy()
|
||||||
inject_vars.update(include_vars)
|
inject_vars.update(include_vars)
|
||||||
included = utils.template_from_file(path, inject_vars, SETUP_CACHE, no_engine=True)
|
included = utils.parse_yaml_from_file(path)
|
||||||
included = utils.parse_yaml(included)
|
|
||||||
for x in included:
|
for x in included:
|
||||||
if len(include_vars):
|
if len(include_vars):
|
||||||
x["vars"] = include_vars
|
x["vars"] = include_vars
|
||||||
|
|
|
@ -262,14 +262,15 @@ class Runner(object):
|
||||||
async_jid=None, async_module=None, async_limit=None):
|
async_jid=None, async_module=None, async_limit=None):
|
||||||
''' runs a module that has already been transferred '''
|
''' 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)
|
conditional = utils.double_template(self.conditional, inject, self.setup_cache)
|
||||||
if not eval(conditional):
|
if not eval(conditional):
|
||||||
return [ utils.smjson(dict(skipped=True)), None, 'skipped' ]
|
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':
|
if self.module_name == 'setup':
|
||||||
args = self._add_setup_vars(inject, args)
|
args = self._add_setup_vars(inject, args)
|
||||||
args = self._add_setup_metadata(args)
|
args = self._add_setup_metadata(args)
|
||||||
|
|
|
@ -172,3 +172,28 @@ class TestPlaybook(unittest.TestCase):
|
||||||
print data
|
print data
|
||||||
assert data.find("ears") != -1, "template success"
|
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]
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
---
|
---
|
||||||
duck: quack
|
duck: quack
|
||||||
cow: moo
|
cow: moo
|
||||||
|
extguard: " '$favcolor' == 'blue' "
|
||||||
|
|
14
test/playbook_included.yml
Normal file
14
test/playbook_included.yml
Normal 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
|
15
test/playbook_includes.yml
Normal file
15
test/playbook_includes.yml
Normal 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
|
Loading…
Reference in a new issue