summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Cammarata <jimi@sngx.net>2015-11-19 09:01:51 -0500
committerJames Cammarata <jimi@sngx.net>2015-11-19 09:01:51 -0500
commit91500f8f5f0def49120daa941d139c3809843f9d (patch)
treeedcf5502850d13dea9439d93a7d8ed6ea6ff447e
parent78e4f176e61673b4f52ad952e96ed431dd4b7148 (diff)
downloadansible-91500f8f5f0def49120daa941d139c3809843f9d.tar.gz
Fix include param precedence in variable manager
-rw-r--r--lib/ansible/playbook/task.py8
-rw-r--r--lib/ansible/vars/__init__.py6
-rw-r--r--test/units/vars/test_variable_manager.py1
3 files changed, 15 insertions, 0 deletions
diff --git a/lib/ansible/playbook/task.py b/lib/ansible/playbook/task.py
index 38cca4b3a2..4f326b628b 100644
--- a/lib/ansible/playbook/task.py
+++ b/lib/ansible/playbook/task.py
@@ -272,6 +272,14 @@ class Task(Base, Conditional, Taggable, Become):
return all_vars
+ def get_include_params(self):
+ all_vars = dict()
+ if self._task_include:
+ all_vars.update(self._task_include.get_include_params())
+ if self.action == 'include':
+ all_vars.update(self.vars)
+ return all_vars
+
def copy(self, exclude_block=False):
new_me = super(Task, self).copy()
diff --git a/lib/ansible/vars/__init__.py b/lib/ansible/vars/__init__.py
index aed29150e6..5819f0547f 100644
--- a/lib/ansible/vars/__init__.py
+++ b/lib/ansible/vars/__init__.py
@@ -319,6 +319,12 @@ class VariableManager:
all_vars = combine_vars(all_vars, self._vars_cache.get(host.get_name(), dict()))
all_vars = combine_vars(all_vars, self._nonpersistent_fact_cache.get(host.name, dict()))
+ # special case for include tasks, where the include params
+ # may be specified in the vars field for the task, which should
+ # have higher precedence than the vars/np facts above
+ if task:
+ all_vars = combine_vars(all_vars, task.get_include_params())
+
all_vars = combine_vars(all_vars, self._extra_vars)
all_vars = combine_vars(all_vars, magic_variables)
diff --git a/test/units/vars/test_variable_manager.py b/test/units/vars/test_variable_manager.py
index acd8e5c898..41f08138a5 100644
--- a/test/units/vars/test_variable_manager.py
+++ b/test/units/vars/test_variable_manager.py
@@ -173,6 +173,7 @@ class TestVariableManager(unittest.TestCase):
mock_task._role = None
mock_task.loop = None
mock_task.get_vars.return_value = dict(foo="bar")
+ mock_task.get_include_params.return_value = dict()
v = VariableManager()
self.assertEqual(v.get_vars(loader=fake_loader, task=mock_task, use_cache=False).get("foo"), "bar")