summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Cammarata <jimi@sngx.net>2016-03-21 01:38:48 -0400
committerJames Cammarata <jimi@sngx.net>2016-03-21 01:39:51 -0400
commitb89cee92a50128d3c135330aacecda72292caa37 (patch)
tree5c35ad980fd3750195b54642cb133ddaba05a51b
parent7460f76f8d8c7b231a14c5b6b492f57190a49d27 (diff)
downloadansible-jjshoe_role_default_dep_chain_fix.tar.gz
Make default var lookup for tasks follow the dep chainjjshoe_role_default_dep_chain_fix
Related to #14296 (@jjshoe's follow-up example on that issue)
-rw-r--r--lib/ansible/playbook/role/__init__.py5
-rw-r--r--lib/ansible/vars/__init__.py2
2 files changed, 5 insertions, 2 deletions
diff --git a/lib/ansible/playbook/role/__init__.py b/lib/ansible/playbook/role/__init__.py
index 133dd50acc..b86ad0fd02 100644
--- a/lib/ansible/playbook/role/__init__.py
+++ b/lib/ansible/playbook/role/__init__.py
@@ -252,10 +252,13 @@ class Role(Base, Become, Conditional, Taggable):
def get_parents(self):
return self._parents
- def get_default_vars(self):
+ def get_default_vars(self, dep_chain=[]):
default_vars = dict()
for dep in self.get_all_dependencies():
default_vars = combine_vars(default_vars, dep.get_default_vars())
+ if dep_chain:
+ for parent in dep_chain:
+ default_vars = combine_vars(default_vars, parent._default_vars)
default_vars = combine_vars(default_vars, self._default_vars)
return default_vars
diff --git a/lib/ansible/vars/__init__.py b/lib/ansible/vars/__init__.py
index 2d1a872f29..c95d25c5a3 100644
--- a/lib/ansible/vars/__init__.py
+++ b/lib/ansible/vars/__init__.py
@@ -220,7 +220,7 @@ class VariableManager:
# sure it sees its defaults above any other roles, as we previously
# (v1) made sure each task had a copy of its roles default vars
if task and task._role is not None:
- all_vars = combine_vars(all_vars, task._role.get_default_vars())
+ all_vars = combine_vars(all_vars, task._role.get_default_vars(dep_chain=task._block._dep_chain))
if host:
# next, if a host is specified, we load any vars from group_vars