Ansible 可供出售的存货是否可以包括其他存货?

Ansible 可供出售的存货是否可以包括其他存货?,ansible,include,yaml,ansible-inventory,Ansible,Include,Yaml,Ansible Inventory,我们在一个应用程序的不同实例之间共享了一组服务器,希望它们的列表是一个单独的文件,包括其他特定于实例的清单 (我知道,这可以通过动态清单来实现,但这些都是代码,可以说,我们希望我们的服务器列表仍然是数据。) 对于INI库存,这是不可能的,但是对于YAML库存,这是非常接近的。例如,演示了如何通过为添加处理程序来实现这一点!将包含到Python的YAML解析器中。人们可以这样写: 全部: 第一组: 主持人1: 主持人2: 共享服务器:!包括shared-servers.yaml 如何将此功能添加

我们在一个应用程序的不同实例之间共享了一组服务器,希望它们的列表是一个单独的文件,包括其他特定于实例的清单

(我知道,这可以通过动态清单来实现,但这些都是代码,可以说,我们希望我们的服务器列表仍然是数据。)

对于INI库存,这是不可能的,但是对于YAML库存,这是非常接近的。例如,演示了如何通过为
添加处理程序来实现这一点!将
包含到Python的YAML解析器中。人们可以这样写:

全部:
第一组:
主持人1:
主持人2:
共享服务器:!包括shared-servers.yaml

如何将此功能添加到自己的Ansible存储库中?最好不实现一个全新的清单插件(尽管从Ansible现有的清单插件中删除也可以)?

首先,您问题中的示例清单不尊重Ansible清单的模式,将被拒绝

现在,为了回答您的问题,您可以简单地同时使用多个库存。下面是一个简单的例子:

我创建了3个yaml库存文件:

  • inventory/hosts.yml
  • inventory/otherhosts.yml
  • 最后是
    inventory/shared.yml
从那里,解决所有需要的主机就相当容易了:

  • 寻址所有资源清册文件中的所有主机:
在这种情况下,这相当于在单独的
-i
选项中调用每个yaml文件

ansible -i inventories/hosts.yml \
-i inventories/otherhosts.yaml -i inventories/shared.yml all --list-hosts
  • 只处理特定的库存

您可以利用Ansible中已有的功能:

  • 使用库存目录,您可以指定所有库存文件所在的文件夹,这些文件将按字母顺序逐个包含

  • 您可以使用以下任一方法使用多个库存源:

    • 命令行中有多个
      -i
      选项
    • ANSIBLE\u INVENTORY
      环境变量,并提供以逗号分隔的库存路径列表(目录或文件)
    • 使用
      ansible.cfg
      中的
      inventory
      选项执行上述操作
  • 我怀疑你不能满足你的需求。修改包装器脚本和项目的文件结构比破解pyyaml和ansible要好一些。
    /intro_inventory.html?highlight=inventory directory(使用多个库存源)了解更多信息。

    选项1很有意思,但同一文件仍然无法与其他库存(目录)共享,请保存为符号链接。对于其余部分--我们有许多清单--每个应用程序实例一个清单--每个人都习惯于一个实例->一个文件范例。不幸的是,你提出的解决方案需要一段时间才能适应。为什么Ansible不能实现多人想要的功能呢?。。唉……您可以通过在
    ANSIBLE\u inventory
    中指定主库存和共享库存来“共享”库存。这会弄乱命令行:(include的概念非常简单,几十年来一直为人所知(
    #include
    )……您可以创建自己的库存脚本/插件,完全满足您的需求,
    ---
    all:
      children:
        group2:
          hosts:
            hostA:
            hostB:
    
    ---
    all:
      children:
        sharedservers:
          hosts:
            host3:
            host4:
    
      ansible -i inventories/ all --list-hosts
      hosts (6):
        host1
        host2
        hostA
        hostB
        host3
        host4
    
    ansible -i inventories/hosts.yml \
    -i inventories/otherhosts.yaml -i inventories/shared.yml all --list-hosts
    
    ansible -i inventories/hosts.yml -i inventories/shared.yml all --list-hosts
    hosts (4):
      host1
      host2
      host3
      host4
    
    ansible -i inventories/otherhosts.yml -i inventories/shared.yml all --list-hosts
    hosts (4):
      hostA
      hostB
      host3
      host4