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