如何在ansible inventory yaml格式的域下订购多个托管服务器

问题描述 投票:0回答:1

我需要使用多个托管服务器更新yaml清单,并为每个托管服务器应用不同的变量。当前的yaml结构每个域只有一个管理服务器。

---
all:
  hosts:
    localhost:
      ansible_connection: local
  children:
    targets:
      hosts:
        Domain1:
          ansible_host: "www.example1.com"
          admin_url: "t3://www.example1.com"
        Domain2:
          ansible_host: "www.example2.com"
          admin_url: "t3://www.example2.com"

所以域1和2下的ansible_host是管理服务器。现在,我想在每个域下添加多个托管服务器,并且仍然可以根据需要灵活地为每个服务器(管理员和管理员)分配不同的变量值。

ansible ini ansible-inventory
1个回答
1
投票

您应该深入了解yaml inventory documentation以了解它们的结构。恕我直言,他们对初学者的理解比历史上的ini库存要复杂一些。无论如何,你应该在开始之前对all the inventory concepts有一个很好的理解

您应该如何阅读当前的库存文件:

通用组all声明:

  • 一位名叫localhost的直接儿童主持人
  • 一个名为targets的儿童组,有两个名为Domain1Domain2的主人

根据您的问题,我了解您希望将Domain1和Domain2视为组(顾名思义),而不是主机。

您可能需要重写您的库存,如下所示。

all:
  children:
    targets:
      vars:
        admin_url: "t3://{{ inventory_hostname }}"
      children:
        Domain1:
          hosts:
            www.example1.com:
            www.example2.com:
            www.yetanother.com:
        Domain2:
          hosts:
            host1.domain2.com:
            host2.domain2.com:
            host3.domain2.com:

需要注意的事项:

  • 我删除了对localhost的引用。它始终可用。
  • 我保持了你的顶级组targets。由于所有管理地址都具有相同的格式,因此我声明了该组的var,它将用于使用其inventory_hostname的每个主机(请参阅ansible magic variables
  • 你的targets小组现在有两个儿童组:Domain1Domain2都宣布他们的东道主。
  • 由于我们现在使用它们的真实名称声明主机,因此不需要将ansible_host设置为不同的值,因此到目前为止还不需要主机变量。

希望这会帮助您入门。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.