diff options
author | James Cammarata <jimi@sngx.net> | 2015-11-19 09:01:51 -0500 |
---|---|---|
committer | James Cammarata <jimi@sngx.net> | 2015-11-19 09:01:51 -0500 |
commit | 91500f8f5f0def49120daa941d139c3809843f9d (patch) | |
tree | edcf5502850d13dea9439d93a7d8ed6ea6ff447e | |
parent | 78e4f176e61673b4f52ad952e96ed431dd4b7148 (diff) | |
download | ansible-91500f8f5f0def49120daa941d139c3809843f9d.tar.gz |
Fix include param precedence in variable manager
-rw-r--r-- | lib/ansible/playbook/task.py | 8 | ||||
-rw-r--r-- | lib/ansible/vars/__init__.py | 6 | ||||
-rw-r--r-- | test/units/vars/test_variable_manager.py | 1 |
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") |