Skip to content

Commit

Permalink
rewrite precedence rules for more clarify
Browse files Browse the repository at this point in the history
  • Loading branch information
amarao committed Nov 6, 2024
1 parent 40cd7c3 commit 33e912e
Showing 1 changed file with 13 additions and 10 deletions.
23 changes: 13 additions & 10 deletions docs/docsite/rst/playbook_guide/playbooks_variables.rst
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ You can use the `set_fact` module to combine lists into a new `merged_list` vari
- peach
- plum
- pear

tasks:
- name: Combine list1 and list2 into a merged_list var
ansible.builtin.set_fact:
Expand Down Expand Up @@ -425,16 +425,17 @@ Ansible does apply variable precedence, and you might have a use for it. Here is

#. command line values (for example, ``-u my_user``, these are not variables)
#. role defaults (as defined in :ref:`Role directory structure <role_directory_structure>`) [1]_
#. inventory file or script group vars [2]_
#. inventory group_vars/all [3]_
#. playbook group_vars/all [3]_
#. inventory group_vars/* [3]_
#. playbook group_vars/* [3]_
#. inventory file or script host vars [2]_
#. inventory host_vars/* [3]_
#. playbook host_vars/* [3]_
#. variables for group "all" defined inside of an inventory file or script [2]_
#. other group vars defined inside of an inventory file or script [2]_
#. inventory group_vars/all (a file in the directory group_vars/ adjacent to the inventory) [3]_
#. playbook group_vars/all (a file in the directory group_vars/ adjacent to the playbook) [3]_
#. inventory group_vars/* (a file in the directory group_vars/ adjacent to the inventory) [3]_
#. playbook group_vars/* (a file in the directory group_vars/ adjacent to the playbook) [3]_
#. host vars defined in an inventory file or script [2]_
#. inventory host_vars/* (a file in the directory host_vars/ adjacent to the inventory) [3]_
#. playbook host_vars/* (a file in the directory host_vars/ adjacent to the inventory) [3]_
#. host facts / cached set_facts [4]_
#. play vars
#. play vars (defined in the section vars for the play)
#. play vars_prompt
#. play vars_files
#. role vars (as defined in :ref:`Role directory structure <role_directory_structure>`)
Expand All @@ -446,6 +447,8 @@ Ansible does apply variable precedence, and you might have a use for it. Here is
#. include params
#. extra vars (for example, ``-e "user=my_user"``)(always win precedence)

If inventory file is located in the same directory as a playbook, adjacent group_vars/ are interpreted twice both as inventory group_vars/ and playbook group_vars/, therefore, getting precedence of the playbook group_vars.

In general, Ansible gives precedence to variables that were defined more recently, more actively, and with more explicit scope. Variables in the defaults folder inside a role are easily overridden. Anything in the vars directory of the role overrides previous versions of that variable in the namespace. Host and/or inventory variables override role defaults, but explicit includes such as the vars directory or an ``include_vars`` task override inventory variables.

Ansible merges different variables set in inventory so that more specific settings override more generic settings. For example, ``ansible_ssh_user`` specified as a group_var is overridden by ``ansible_user`` specified as a host_var. For details about the precedence of variables set in inventory, see :ref:`how_we_merge`.
Expand Down

0 comments on commit 33e912e

Please sign in to comment.