首页 > 解决方案 > 在 hosts 文件中定位 Ansible 嵌套子组

问题描述

我有一个包含嵌套子组的主机文件,类似于:

 all:
  children:
   GROUP1:
    children:
        webservers:
            hosts:
                hostname1:
        sqlservers:
            hosts:
                hostname2:

   GROUP2:
    children:
        webservers:
            hosts:
                hostname3:
                hostname4:

   GROUP3:
    children:
        webservers:
            hosts:
                hostname5:
                hostname6:
        sqlservers:
            hosts:
                hostname7:

我可以成功定位第一层组,例如 GROUP1,但我希望定位嵌套组,例如 GROUP1>webservers 或 GROUP3>sqlservers。

我能找到的文档只涉及第一层组。有没有办法做到这一点?

谢谢,

标签: ansibleansible-inventory

解决方案


Ansible 实际上并不支持“嵌套组”。组名是一个平面命名空间,并且只能在您的清单中定义一次。当您将一个组定义(如webservers)嵌套在另一个组(如GROUP1)中时,它实际上只是使主机成为两个组的成员的简写。

换句话说,当你写这个时:

all:
  children:
    GROUP1:
      children:
        webservers:
          hosts:
            hostname1:
        sqlservers:
          hosts:
            hostname2:

    GROUP2:
      children:
        webservers:
          hosts:
            hostname3:
            hostname4:

它与以下平面布局相同:

all:
  children:
    GROUP1:
      hosts:
        hostname1:
        hostname2:

    GROUP2:
      hosts:
        hostname3:
        hostname4:

    webservers:
      hosts:
        hostname3:
        hostname4:

    sqlservers:
      hosts:
        hostname2:

请注意,该webservers组仅包含hostnameand hostname4,因为您的第二个定义webservers覆盖了第一个。


推荐阅读