2016-12-05 83 views
2

我正在寻找一种适用于某种形式的共享库存的优雅解决方案,该库存可用于保持与当前库存无关的变量。Ansible共享库存

实施例:有用来定义环境的多个清单:

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

每个这些customises环境特定细节的负载。但是,某些内容(如许可证密钥,用户凭据等)不是特定于环境的。

当前通过更新每个清单中的*/group_vars/all手动保持该信息同步。

但是,有没有一种更优雅的解决方案,可以将它保存在中央位置,而且不需要在库存之间重复相同的信息?

+1

如果你想不依赖于库存的变量,你为什么不使用常规的可变文件? – techraf

+0

这就是我以前所做的。随着时间的推移,我已经认识到,将配置分配到清单和任务到角色中是一个很好的约定。坚持约定可以让其他需要使用工作的人更容易。因此我试图找到更好的解决方案。 –

回答

1

如果您将所有这些清单用于单个剧本,则可以将group_vars/all放置到您的剧本目录中 - Ansible不仅可以从库存文件中读取主持人和组vars,还可以从当前剧本目录中读取主持人和组vars。

如果使用这些库存有多个剧本,你可以创建不同的库存公用目录和符号链接:

/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 
+0

适用于group_vars。出于某种原因,它不能在'/ inventory-live/host_vars/localhost/common.yml'中工作。在这种情况下不会读取文件,但是'/ inventory-live/host_vars/localhost/vars.yml'确实可以工作。我无法找到有关此行为的任何文档(Ansible 2.2),但提供的答案工作得很好。 –