我正在寻找一种优雅的解决方案来处理某种形式的共享库存,可以用于持续存在的变量,无论当前库存如何。
示例:有多个库存用于定义环境:
/inventory-live/
/inventory-staging/
/inventory-test/
/inventory-develop/
其中每个都定制了一系列环境特定细节。但是,某些内容(如许可证密钥,用户凭据等)不是特定于环境的。
目前,通过更新每个库存中的*/group_vars/all
手动保持此信息的同步。
但是,是否有更优雅的解决方案将其保持在中心位置,并且不涉及在库存之间重复相同的信息?
如果您将所有这些库存与单个剧本一起使用,您可以将group_vars/all
放入您的剧本目录中 - Ansible不仅可以从库存文件中读取主机和组,还可以从当前的playbook目录中读取变量。
如果将这些清单与多个playbook一起使用,则可以从不同的清单创建公共目录和符号链接:
/inventory-common/common_vars.yml
/inventory-live/group_vars/all/common.yml -> ../../../inventory-common/common_vars.yml
/inventory-test/group_vars/all/common.yml -> ../../../inventory-common/common_vars.yml
在https://github.com/ansible/ansible/commit/8f97aef1a365cbbbb822d6d09f96af17a076b295的Ansible 2.4中引入的是能够在命令行上指定多个库存文件:
--inventory inventory1 --inventory inventory2
或ansible.cfg:
inventory = inventory1,inventory2
inventory1将是共享库存,inventory2中的匹配键将覆盖inventory1。
来源:https://github.com/ansible/ansible/issues/5316#issuecomment-345051733