-
Notifications
You must be signed in to change notification settings - Fork 554
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rewrite precedence rules for more clarify #2112
base: devel
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -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: | ||||||
|
@@ -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 ``group_vars/`` directory that is adjacent to the inventory) [3]_ | ||||||
#. playbook ``group_vars/all`` (a file in the ``group_vars/`` directory that is adjacent to the playbook) [3]_ | ||||||
#. inventory ``group_vars/*`` (a file in the ``group_vars/`` directory that is adjacent to the inventory) [3]_ | ||||||
#. playbook ``group_vars/*`` (a file in the ``group_vars/`` directory that is adjacent to the playbook) [3]_ | ||||||
#. host vars defined in an inventory file or script [2]_ | ||||||
#. inventory ``host_vars/*`` (a file in the ``host_vars/`` directory that is adjacent to the inventory) [3]_ | ||||||
#. playbook ``host_vars/*`` (a file in the ``host_vars/`` directory that is 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>`) | ||||||
|
@@ -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. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is incorrect, at no point does the inventory file get precedence over the playbook's group_vars. What happens is that since the file is processed x2, it ends up with the highest precedence, that of the playbook relative file. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hello, thank you for suggestion I accept it, but correct for playbook been 'stronger'. |
||||||
|
||||||
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`. | ||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there are also vars_prompt and vars_files
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It was added by Don Naro