从不同的主机文件创建主机组

38次阅读
没有评论

问题描述

有两个不同的主机文件,每个文件中都有不同的主机、主机组和超集。他希望从这些文件中创建一个包含一部分主机的主机组。以下是他的问题:

他有两个主机文件 /etc/hostFiles/TestBoxes/etc/hostFiles/ProdBoxes,它们分别包含如下内容:

/etc/hostFiles/TestBoxes

[TestBox:children]
groupA
groupB

[groupA]
......
[groupB]
......

/etc/hostFiles/ProdBoxes

[ProdBox:children]
groupPA
groupPB

[groupPA]
......
[groupPB]
......

现在,他希望创建一个名为 Primary 的主机组,其中包含来自 TestBoxesProdBoxes 的一部分主机。

注意:这只是一个示例,他实际上有100多个类似的文件,他希望从其中的一些文件创建 Primary 主机组。他不想使用 hosts=all

解决方案

在进行操作之前,请确保对操作有清楚的理解,并做好数据备份。

为了实现从不同的主机文件创建一个包含一部分主机的主机组,可以使用 constructed 主机清单插件。以下是实现此目标的步骤:

  1. 使用 ansible-doc 命令查看 constructed 主机清单插件的文档。
    bash
    ansible-doc -t inventory constructed

  2. 创建主机清单文件夹结构,其中包含各个主机文件和用于创建 Primary 主机组的文件。
    plaintext
    inventory/
    ├── 01-TestBoxes
    ├── 02-ProdBoxes
    └── 03-Primary.yml

  3. 在各个文件中定义主机和主机组的配置,比如 01-TestBoxes02-ProdBoxes 文件。

  4. 03-Primary.yml 文件中定义一个 constructed 插件配置,该配置将根据条件创建 Primary 主机组。以下是 03-Primary.yml 文件的示例内容:
    yaml
    plugin: constructed
    groups:
    Primary: (group_names | intersect(['ProdBox', 'TestBox'])) | length > 0

  5. 创建一个 playbook 文件,用于执行操作。以下是示例 playbook 的内容:
    “`yaml

  6. hosts: Primary
    gather_facts: false
    tasks:

    • debug:
      var: inventory_hostname
      “`
  7. 使用 ansible-playbook 命令运行 playbook,它会读取 inventory 文件夹中的文件并执行操作。
    bash
    ansible-playbook -i inventory pb.yml

通过上述步骤,你可以实现从不同的主机文件创建一个包含一部分主机的 Primary 主机组。在 03-Primary.yml 文件中,根据条件筛选了属于 ProdBoxTestBox 组的主机,并将其加入了 Primary 主机组中。

注意:如果你有大量类似的文件,你还可以通过创建链接来简化文件结构,如上面提到的创建链接的方法。

请根据实际情况和需求进行操作,并确保在执行操作之前进行充分的测试。

正文完