在主机文件中定位 Ansible 嵌套子组

Target Ansible nested children groups in hosts file

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

 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。

我能找到的文档只针对第一层组。 有办法吗?

谢谢,

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

换句话说,当你这样写的时候:

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 组仅包含 hostnamehostname4,因为您对 webservers 的第二个定义覆盖了 第一个.