我一直在阅读Ansible中的vars
优先级,但不确定所获得的行为是否是设计使然。这是我的Ansible库存;
---
all:
children:
we:
children:
workers:
hosts:
worker-we-vm1:
order: 1
worker-ew-vm2:
order: 2
vars:
size: "Standard_B2s"
controllers:
hosts:
controller-we-vm:
order: 1
vars:
size: "Standard_B1s"
vars:
ip_prefix: "10.60"
scus:
children:
workers:
hosts:
worker-scus-vm1:
order: 1
worker-scus-vm2:
order: 2
vars:
size: "Standard_B2s"
vars:
ip_prefix: "10.61"
vars:
azure_profile: "test"
现在我期望的是we
VM(例如worker-we-vm1
)将ip_prefix
设置为10.60
,而scus
VM(例如worker-scus-vm1
)在访问ip_prefix
时会将10.61
设置为hostvars
。但是不是,所有VM都将ip_prefix
设置为10.60
。
任何人都可以帮助您理解为什么vars
优先级未按预期工作吗?我已经读过https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html,在处理父级和同级变量方面似乎很矛盾。
答案 0 :(得分:0)
可用的主机组名称空间是平坦的,不是分层的,因此示例中只有一个workers
组。
为该组定义两次相同的变量时,只会保留最后一个值。
例如,将您的workers
组拆分为workers_we
和workers_scus
(如果是定义的原因,请使用主机模式)。