组变量同名问题
有一种情况,一些主机,既属于A组,又属于B组。且拥有同名的变量。
有如下inventory定义
[etcd_36_11]
10.6.36.11
10.6.36.13
[kvm_hosts]
10.6.36.11
10.6.36.13
组变量定义如下
# etcd_36_11.yml
nano_packet: '{{packet_base_dir}}/nano/nano-cell-1.3.0.tgz2'
# kvm_hosts.yml
nano_packet: '{{packet_base_dir}}/nano/nano-cell-1.3.0.tgz'
playbook如下:
# cat /tmp/test1.yml
#- hosts: kvm_hosts,etcd_36_11
- hosts: etcd_36_11,kvm_hosts
tasks:
- name: debug msg
debug:
msg: '{{nano_packet}}'
这时,输出为如下。
[root@nano-kvm-11 group_vars]# ansible-playbook /tmp/test1.yml
PLAY [etcd_36_11,kvm_hosts] *************************************************************************************************************************************
TASK [debug msg] ************************************************************************************************************************************************
ok: [10.6.36.11] => {
"msg": "/data/apps/soft/ansible/nano/nano-cell-1.3.0.tgz"
}
ok: [10.6.36.13] => {
"msg": "/data/apps/soft/ansible/nano/nano-cell-1.3.0.tgz"
}
如何让其输出nano-cell-1.3.0.tgz2
的值呢?
在inventory
中为组指定ansible_group_priority
变量
一定得在inventory
中指定此变量,不能在group_vars
中指定。
如
[etcd_36_11]
10.6.36.11
10.6.36.13
[etcd_36_11:vars]
ansible_group_priority=10
[kvm_hosts]
10.6.36.11
10.6.36.13
变量值越大,优先级越高,不指定时,按字母顺序来加载,字母顺序靠后,则生效。
字母与数字相比,字母的组名定义的变量生效。
注意,数字开头的组名会有warning:[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
。
参考
- https://stackoverflow.com/questions/38120793/ansible-group-vars-priority : Ansible group vars priority
- https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#how-variables-are-merged : How variables are merged