mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-23 13:20:23 -07:00
Fix variable precedence of INI/script vars to be in-line with docs.
This commit also adds a new test script (ansible-var-precedence-check.py in code-smell/) to provide us with another line of defense against precedence bugs going forward. The precedence docs state that the INI vars have a lower precedence than group/host vars files for inventory and playbooks, however that has not been the case since 2.0 was released. This change fixes that in one way, though not exactly as the docs say. The rules are: 1) INI/script < inventory dir < playbook dir 2) "all" group vars < other group_vars < host_vars So the new order will be (from the test script mentioned above): 8. pb_host_vars_file - var in playbook/host_vars/host 9. ini_host_vars_file - var in inventory/host_vars/host 10. ini_host - host var inside the ini 11. pb_group_vars_file_child - var in playbook/group_vars/child 12. ini_group_vars_file_child - var in inventory/group_vars/child 13. pb_group_vars_file_parent - var in playbook/group_vars/parent 14. ini_group_vars_file_parent - var in inventory/group_vars/parent 15. pb_group_vars_file_all - var in playbook/group_vars/all 16. ini_group_vars_file_all - var in inventory/group_vars/all 17. ini_child - child group var inside the ini 18. ini_parent - parent group var inside the ini 19. ini_all - all group var inside the ini Fixes #21845
This commit is contained in:
parent
ff20ab7d44
commit
a2599cab79
3 changed files with 557 additions and 15 deletions
|
@ -249,19 +249,17 @@ class VariableManager:
|
|||
all_vars = combine_vars(all_vars, task._role.get_default_vars(dep_chain=task.get_dep_chain()))
|
||||
|
||||
if host:
|
||||
# next, if a host is specified, we load any vars from group_vars
|
||||
# files and then any vars from host_vars files which may apply to
|
||||
# this host or the groups it belongs to
|
||||
# first we merge in vars from groups specified in the inventory (INI or script)
|
||||
all_vars = combine_vars(all_vars, host.get_group_vars())
|
||||
|
||||
# we merge in the special 'all' group_vars first, if they exist
|
||||
# next, we load any vars from group_vars files and then any vars from host_vars
|
||||
# files which may apply to this host or the groups it belongs to. We merge in the
|
||||
# special 'all' group_vars first, if they exist
|
||||
if 'all' in self._group_vars_files:
|
||||
data = preprocess_vars(self._group_vars_files['all'])
|
||||
for item in data:
|
||||
all_vars = combine_vars(all_vars, item)
|
||||
|
||||
# we merge in vars from groups specified in the inventory (INI or script)
|
||||
all_vars = combine_vars(all_vars, host.get_group_vars())
|
||||
|
||||
for group in sorted(host.get_groups(), key=lambda g: (g.depth, g.name)):
|
||||
if group.name in self._group_vars_files and group.name != 'all':
|
||||
for data in self._group_vars_files[group.name]:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue