我们有一组在应用程序的不同实例之间共享的服务器,希望它们的列表是一个单独的文件,其他特定于实例的清单包括。
(我知道,这可以通过动态库存来完成,但这些都是代码,可以说,我们希望我们的服务器列表保持数据。(
对于INI库存,这是不可能的,但对于YAML库存,这已经非常接近了。例如,这个答案显示了如何通过将!include
的处理程序添加到Python的YAML解析器中来实现这一点。然后可以写:
all:
group1:
host1:
host2:
sharedservers: !include shared-servers.yaml
如何将此功能添加到自己的Ansible存储库中?最好不要实现一个全新的库存插件(尽管从Ansible现有的库存插件中继承是可以的(?
首先,问题中的示例库存不尊重yaml-ansible库存的模式,将被拒绝解析。
现在,为了回答您的问题,您可以简单地同时使用多个库存。这里有一个简单的例子:
我创建了3个yaml库存文件:
inventories/hosts.yml
--- group1: hosts: host1: host2:
inventories/otherhosts.yml
--- group2: hosts: hostA: hostB:
- 最后是
inventories/shared.yml
--- sharedservers: hosts: host3: host4:
从那里,可以很容易地寻址所有需要的主机。以下示例使用ansible-inventory
以获得更好的输出,但-i
选项和目标选择与ansible
和ansible-playbook
相同
- 寻址库存目录中所有库存文件中的所有主机:
在这种情况下,这相当于在单独的$ ansible-inventory -i inventories/ all --graph @all: |--@group1: | |--host1 | |--host2 |--@group2: | |--hostA | |--hostB |--@sharedservers: | |--host3 | |--host4 |--@ungrouped:
-i
选项中调用每个yaml文件ansible-inventory -i inventories/hosts.yml -i inventories/otherhosts.yml -i inventories/shared.yml all --graph
- 仅处理特定库存
$ ansible-inventory -i inventories/hosts.yml -i inventories/shared.yml all --graph @all: |--@group1: | |--host1 | |--host2 |--@sharedservers: | |--host3 | |--host4 |--@ungrouped: $ ansible-inventory -i inventories/otherhosts.yml -i inventories/shared.yml all --graph @all: |--@group2: | |--hostA | |--hostB |--@sharedservers: | |--host3 | |--host4 |--@ungrouped:
您可以利用Ansible:中已有的功能
-
使用库存目录,您可以指定所有库存文件所在的文件夹,这些文件将按字母顺序逐一包含。
-
您可以使用以下任一项使用多个库存来源:
命令行中的多个-i
选项 ANSIBLE_INVENTORY
环境变量,并提供以逗号分隔的清单路径列表(目录或文件(- CCD_ 13中的CCD_
请参阅文档。
我怀疑,有了以上这些,你将无法满足你的需求。与其破解pyyaml和ansible,不如稍微修改一下包装器脚本和项目的文件结构。/intro_inventory.html?highlight=inventory directory#using multiple inventory sources(获取更多信息。