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.60scus 虚拟机(例如 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_weworkers_scus(如果这是定义的原因,则使用主机模式)。