Ansible库存可以包括另一个吗



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

(我知道,这可以通过动态库存来完成,但这些都是代码,可以说,我们希望我们的服务器列表保持数据。(

对于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选项和目标选择与ansibleansible-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:中已有的功能

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

  2. 您可以使用以下任一项使用多个库存来源:

    命令行中的多个-i选项
  3. ANSIBLE_INVENTORY环境变量,并提供以逗号分隔的清单路径列表(目录或文件(
  4. CCD_ 13中的CCD_

请参阅文档。

我怀疑,有了以上这些,你将无法满足你的需求。与其破解pyyaml和ansible,不如稍微修改一下包装器脚本和项目的文件结构。/intro_inventory.html?highlight=inventory directory#using multiple inventory sources(获取更多信息。

最新更新