Ansible:如果有多个 'extra_vars' 文件,变量 order/precedence 是什么?
Ansible: What is the variable order/precedence in case of multiple 'extra_vars' files?
在这个关于“”的老问题中,原发布者回答了这个问题,说多个 vars 文件可以通过使用多个 --extra-vars
参数来完成。
我的后续问题是,在这种情况下,ansible-playbook
命令行有两个 --extra-vars
参数,每个参数指向不同的文件,顺序或优先级是什么那些文件?
此外,如果两个文件中的变量名称相同(例如,my_host
)会怎样?
例如,假设我有 2 个文件,extraVars1.yml
和 extraVars2.yml
,在 ansible-playbook
命令行中我有:
ansible-playbook... --extra-vars "@extraVars1.yml" --extra-vars "@extraVars2.yml"
并且 extraVars1.yml
文件有:
my_host: 1.2.3.4
并且 extraVars2.yml
文件有:
my_host: 5.6.7.8
当剧本为 运行 时,my_host
变量的值是多少?
谢谢!
吉姆
根据有关 使用变量 和 Understanding variable precedence
的 Ansible 文档
extra vars
(for example, -e "user=my_user"
) (always win precedence)
In general, Ansible gives precedence to variables that were defined more recently ...
这意味着最后定义的获胜。
让我们在这里用 vars.yml
剧本做一个简短的测试。
---
- hosts: localhost
become: false
gather_facts: false
vars:
my_host: 9.0.0.0
tasks:
- name: Show value
debug:
msg: "{{ my_host }}"
ansible-playbook vars.yml
的执行将导致输出
TASK [Show value] ***
ok: [localhost] =>
msg: 9.0.0.0
ansible-playbook -e "@extraVars1.yml" vars.yml
的执行将导致输出
TASK [Show value] ***
ok: [localhost] =>
msg: 1.2.3.4
ansible-playbook -e "@extraVars1.yml" -e "@extraVars2.yml" vars.yml
的执行将导致输出
TASK [Show value] ***
ok: [localhost] =>
msg: 5.6.7.8
ansible-playbook -e "@extraVars2.yml" -e "@extraVars1.yml" vars.yml
的执行将导致输出
TASK [Show value] ***
ok: [localhost] =>
msg: 1.2.3.4
在这个关于“--extra-vars
参数来完成。
我的后续问题是,在这种情况下,ansible-playbook
命令行有两个 --extra-vars
参数,每个参数指向不同的文件,顺序或优先级是什么那些文件?
此外,如果两个文件中的变量名称相同(例如,my_host
)会怎样?
例如,假设我有 2 个文件,extraVars1.yml
和 extraVars2.yml
,在 ansible-playbook
命令行中我有:
ansible-playbook... --extra-vars "@extraVars1.yml" --extra-vars "@extraVars2.yml"
并且 extraVars1.yml
文件有:
my_host: 1.2.3.4
并且 extraVars2.yml
文件有:
my_host: 5.6.7.8
当剧本为 运行 时,my_host
变量的值是多少?
谢谢! 吉姆
根据有关 使用变量 和 Understanding variable precedence
的 Ansible 文档
extra vars
(for example,-e "user=my_user"
) (always win precedence)In general, Ansible gives precedence to variables that were defined more recently ...
这意味着最后定义的获胜。
让我们在这里用 vars.yml
剧本做一个简短的测试。
---
- hosts: localhost
become: false
gather_facts: false
vars:
my_host: 9.0.0.0
tasks:
- name: Show value
debug:
msg: "{{ my_host }}"
ansible-playbook vars.yml
的执行将导致输出
TASK [Show value] ***
ok: [localhost] =>
msg: 9.0.0.0
ansible-playbook -e "@extraVars1.yml" vars.yml
的执行将导致输出
TASK [Show value] ***
ok: [localhost] =>
msg: 1.2.3.4
ansible-playbook -e "@extraVars1.yml" -e "@extraVars2.yml" vars.yml
的执行将导致输出
TASK [Show value] ***
ok: [localhost] =>
msg: 5.6.7.8
ansible-playbook -e "@extraVars2.yml" -e "@extraVars1.yml" vars.yml
的执行将导致输出
TASK [Show value] ***
ok: [localhost] =>
msg: 1.2.3.4