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

How to order multiple managed servers under a domain in ansible inventory yaml format

我需要更新具有多个托管服务器的 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 是管理服务器。现在我想在每个域下添加多个托管服务器,并且仍然可以根据需要灵活地为每个服务器(管理和托管)分配不同的变量值。

你应该在开始之前深入了解yaml inventory documentation to understand how they are structured. IMHO they are a little more complex to understand for starters than the historic ini inventories. You should have a good understanding of 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 设置为不同的值,因此目前不需要主机变量。

希望这对您入门有所帮助。