【问题标题】:Ansible Inventory file precedenceAnsible Inventory 文件优先级
【发布时间】:2018-06-25 09:47:34
【问题描述】:

我一直在阅读 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访问hostvars 时发送至10.61。但事实并非如此,所有虚拟机都将ip_prefix 设置为10.60

谁能帮助理解为什么vars 优先级没有按预期工作?我读过https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html,它似乎与父变量和同级变量的处理方式相矛盾。

【问题讨论】:

    标签: ansible ansible-inventory


    【解决方案1】:

    Ansible 主机组命名空间是扁平的,不是分层的,因此在您的示例中只有一个 workers 组。

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

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

    【讨论】:

    • 谢谢,我刚刚按照您的建议进行了修改,不幸的是我仍然遇到同样的问题。由于变量是在scus/we 组级别而不是workers/controllers 组级别设置的,所以无论如何它会产生任何影响吗?
    • 所以你正在做一些不同的事情。如果您获取您发布的清单并在一个地方重命名workers,结果确实会改变。我不确定您在第二部分中要问什么 - 您为 we 定义变量值并期望它不会被 workerscontrollers 继承?这有什么意义?
    • 确实你是对的,我是个白痴!太塔了
    猜你喜欢
    • 2016-11-02
    • 2016-05-23
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 2015-12-27
    相关资源
    最近更新 更多