Ansible库存文件优先

时间:2018-06-25 09:47:34

标签: ansible ansible-inventory

我一直在阅读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,在处理父级和同级变量方面似乎很矛盾。

1 个答案:

答案 0 :(得分:0)

可用的主机组名称空间是平坦的,不是分层的,因此示例中只有一个workers组。

为该组定义两次相同的变量时,只会保留最后一个值。

例如,将您的workers组拆分为workers_weworkers_scus(如果是定义的原因,请使用主机模式)。