Fix variable precedence issue where set facts beat role params

Also updates doc on variable precedence, as it was incorrect for the
order of play vars/vars_prompt/vars_files in relation to set_fact and
registered variables.

Fixes #14702
Fixes #14826
pull/16175/head
James Cammarata 9 years ago
parent 1eab7e117c
commit b37b51dcea

@ -803,11 +803,11 @@ In 2.x, we have made the order of precedence more specific (with the last listed
* playbook group_vars * playbook group_vars
* playbook host_vars * playbook host_vars
* host facts * host facts
* registered vars
* set_facts
* play vars * play vars
* play vars_prompt * play vars_prompt
* play vars_files * play vars_files
* registered vars
* set_facts
* role and include vars * role and include vars
* block vars (only for tasks in block) * block vars (only for tasks in block)
* task vars (only for the task) * task vars (only for the task)

@ -327,20 +327,19 @@ class VariableManager:
for role in play.get_roles(): for role in play.get_roles():
all_vars = combine_vars(all_vars, role.get_vars(include_params=False)) all_vars = combine_vars(all_vars, role.get_vars(include_params=False))
if host:
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()))
if task: if task:
if task._role: if task._role:
all_vars = combine_vars(all_vars, task._role.get_vars(include_params=False)) all_vars = combine_vars(all_vars, task._role.get_vars(include_params=False))
all_vars = combine_vars(all_vars, task._role.get_role_params(task._block.get_dep_chain())) all_vars = combine_vars(all_vars, task._role.get_role_params(task._block.get_dep_chain()))
all_vars = combine_vars(all_vars, task.get_vars()) all_vars = combine_vars(all_vars, task.get_vars())
if host: # special case for include tasks, where the include params
all_vars = combine_vars(all_vars, self._vars_cache.get(host.get_name(), dict())) # may be specified in the vars field for the task, which should
all_vars = combine_vars(all_vars, self._nonpersistent_fact_cache.get(host.name, dict())) # have higher precedence than the vars/np facts above
# 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, task.get_include_params())
all_vars = combine_vars(all_vars, self._extra_vars) all_vars = combine_vars(all_vars, self._extra_vars)

Loading…
Cancel
Save