Correct variable blending from vars_files with hostvars in them

Fixes #8638
This commit is contained in:
James Cammarata 2014-08-15 15:57:02 -05:00
commit 8a1fbed5d6
14 changed files with 69 additions and 64 deletions

View file

@ -3,3 +3,4 @@
- 'extra_var == "extra_var"'
- 'vars_var == "vars_var"'
- 'vars_files_var == "vars_files_var"'
- 'vars_files_var_role == "vars_files_var_role3"'

View file

@ -2,6 +2,7 @@
- debug: var=param_var
- debug: var=vars_var
- debug: var=vars_files_var
- debug: var=vars_files_var_role
- debug: var=defaults_file_var_role1
- assert:
that:
@ -9,4 +10,5 @@
- 'param_var == "param_var_role1"'
- 'vars_var == "vars_var"'
- 'vars_files_var == "vars_files_var"'
- 'vars_files_var_role == "vars_files_var_role3"'
- 'defaults_file_var_role1 == "defaults_file_var_role1"'

View file

@ -1,3 +1,4 @@
---
# should override the global vars_files_var since it's local to the role
vars_files_var: "vars_files_var_role1"
# but will be set to the value in the last role included which defines it
vars_files_var_role: "vars_files_var_role1"

View file

@ -2,6 +2,7 @@
- debug: var=param_var
- debug: var=vars_var
- debug: var=vars_files_var
- debug: var=vars_files_var_role
- debug: var=defaults_file_var_role1
- assert:
that:
@ -9,4 +10,5 @@
- 'param_var == "param_var_role2"'
- 'vars_var == "vars_var"'
- 'vars_files_var == "vars_files_var"'
- 'vars_files_var_role == "vars_files_var_role3"'
- 'defaults_file_var_role2 == "overridden by role vars"'

View file

@ -1,5 +1,5 @@
---
# should override the global vars_files_var since it's local to the role
vars_files_var: "vars_files_var_role1"
vars_files_var_role: "vars_files_var_role2"
# should override the value in defaults/main.yml for role 2
defaults_file_var_role2: "overridden by role vars"

View file

@ -2,6 +2,7 @@
- debug: var=param_var
- debug: var=vars_var
- debug: var=vars_files_var
- debug: var=vars_files_var_role
- debug: var=defaults_file_var_role1
- assert:
that:
@ -9,4 +10,5 @@
- 'param_var == "param_var_role3"'
- 'vars_var == "vars_var"'
- 'vars_files_var == "vars_files_var"'
- 'vars_files_var_role == "vars_files_var_role3"'
- 'defaults_file_var_role3 == "overridden from inventory"'

View file

@ -1,3 +1,3 @@
---
# should override the global vars_files_var since it's local to the role
vars_files_var: "vars_files_var_role1"
vars_files_var_role: "vars_files_var_role3"

View file

@ -12,8 +12,10 @@
- debug: var=extra_var
- debug: var=vars_var
- debug: var=vars_files_var
- debug: var=vars_files_var_role
- assert:
that:
- 'extra_var == "extra_var"'
- 'vars_var == "vars_var"'
- 'vars_files_var == "vars_files_var"'
- 'vars_files_var_role == "vars_files_var_role3"'

View file

@ -2,3 +2,4 @@
extra_var: "BAD!"
role_var: "BAD!"
vars_files_var: "vars_files_var"
vars_files_var_role: "should be overridden by roles"

View file

@ -266,37 +266,6 @@ class TestMe(unittest.TestCase):
assert 'foo' in play.playbook.VARS_CACHE['localhost'], "vars_file vars were not loaded into vars_cache"
assert play.playbook.VARS_CACHE['localhost']['foo'] == 'bar', "foo does not equal bar"
def test_vars_files_for_host_with_extra_vars(self):
# host != None
# vars in filename2
# no vars in filename3
# make a vars file
fd, temp_path = mkstemp()
f = open(temp_path, "wb")
f.write("foo: bar\n")
f.close()
# build play attributes
playbook = FakePlayBook()
ds = { "hosts": "localhost",
"vars_files": ["{{ temp_path }}"]}
basedir = "."
playbook.VARS_CACHE['localhost']['temp_path'] = temp_path
playbook.extra_vars = {"foo": "extra"}
# create play and do first run
play = Play(playbook, ds, basedir)
# the second run is started by calling update_vars_files
play.update_vars_files(['localhost'])
os.remove(temp_path)
assert 'foo' in play.vars, "extra vars were not set in play.vars"
assert 'foo' in play.playbook.VARS_CACHE['localhost'], "vars_file vars were not loaded into vars_cache"
assert play.playbook.VARS_CACHE['localhost']['foo'] == 'extra', "extra vars did not overwrite vars_files vars"
########################################
# COMPLEX FILENAME TEMPLATING TESTS