Ansible 共享库存

Ansible Shared Inventory

我正在为某种形式的共享库存寻找一种优雅的解决方案,它可用于无论当前库存如何都持续存在的变量。

示例:有多个清单用于定义环境:

/inventory-live/
/inventory-staging/
/inventory-test/
/inventory-develop/

其中每一个都自定义了一组特定于环境的细节。但是,某些内容(如许可证密钥、用户凭据等)不是特定于环境的。

目前,此信息通过更新每个库存中的 */group_vars/all 手动保持同步。

但是是否有更优雅的解决方案将其保存在中央位置并且不涉及在库存之间重复相同的信息?

如果您将所有这些清单与单个剧本一起使用,则可以将 group_vars/all 放入您的剧本目录中 – Ansible 不仅从清单文件中读取主机和组变量,还从当前剧本目录中读取主机和组变量。

如果您将这些清单与多个剧本一起使用,您可以从不同的清单创建公共目录和符号链接:

/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

Ansible 2.4 在 https://github.com/ansible/ansible/commit/8f97aef1a365cbbbb822d6d09f96af17a076b295 中引入了在命令行上指定多个清单文件的能力:

--inventory inventory1 --inventory inventory2

或ansible.cfg:

inventory = inventory1,inventory2

库存 1 将是共享库存,库存 2 中的匹配键将覆盖库存 1。

来源:https://github.com/ansible/ansible/issues/5316#issuecomment-345051733