Ansible Inventory 文件优先级
Ansible Inventory file precedence
我一直在通读 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
虚拟机(例如 worker-we-vm1
)将 ip_prefix
设置为 10.60
而 scus
虚拟机(例如 worker-scus-vm1
)在访问 hostvars
时会将 ip_prefix
设置为 10.61
。但事实并非如此,所有虚拟机都将 ip_prefix
设置为 10.60
。
任何人都可以帮助理解为什么 vars
优先级没有按预期工作吗?我读过 https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html,它似乎在处理父变量和同级变量的方式上自相矛盾。
Ansible 主机组命名空间是平面的,没有层次结构,因此您的示例中只有一个 workers
组。
当您为该组定义同一个变量两次时,只会保留最后一个值。
将您的 workers
组拆分为 workers_we
和 workers_scus
(如果这是定义的原因,则使用主机模式)。
我一直在通读 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
虚拟机(例如 worker-we-vm1
)将 ip_prefix
设置为 10.60
而 scus
虚拟机(例如 worker-scus-vm1
)在访问 hostvars
时会将 ip_prefix
设置为 10.61
。但事实并非如此,所有虚拟机都将 ip_prefix
设置为 10.60
。
任何人都可以帮助理解为什么 vars
优先级没有按预期工作吗?我读过 https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html,它似乎在处理父变量和同级变量的方式上自相矛盾。
Ansible 主机组命名空间是平面的,没有层次结构,因此您的示例中只有一个 workers
组。
当您为该组定义同一个变量两次时,只会保留最后一个值。
将您的 workers
组拆分为 workers_we
和 workers_scus
(如果这是定义的原因,则使用主机模式)。