我正在寻找以下问题的解决方案:
我们有一些剧本级代码(许多角色,在不同的主机上运行),我们希望在项目之间重用。
我找不到一种将其他人的剧本整合到我的剧本中的深思熟虑(无缝/良好/等)的方法。
集成要点:
set_fact
某人的变量以掩盖其价值)另一个问题是如何在git中处理此问题(如果有git级集成)。
是否有一些最佳实践来进行这种集成?它们存在吗?
(就此,我决定为此使用git-vendor,但我希望有更好的方法)。
答案 0 :(得分:0)
我了解您描述的想法背后的动机,但我认为您所想到的解决方案可能与Ansible的设计方式不一致。 我将解释我的观点,并尝试解决您的要点。
Ansible强调角色级别抽象。在依赖性管理方面,有ansible-galaxy
命令,该命令与Ansible捆绑在一起。
也可以是pointed to custom repository URLs。
ansible-galaxy install git+https://github.com/my-repo/my-ansible-role
文档中还有一些示例,展示了如何设置需求文件,安装一组(自定义)依赖项。
这至少应满足您有关“供应商”的技术要求。
话虽如此,您特别提到了“剧本级代码”。
这意味着您还希望共享清单,因为剧本基本上是主机到角色的映射。
(如果您的剧本不仅仅是角色列表,或者包括其他剧本,那么您可能想考虑将更多的角色重构为角色,请参见上文。)
就Ansible的设计和理念而言,它不强调共享剧本,因为它们一开始就应该很简单,并且没有库存就毫无意义。 并且库存大概是在您的组织之间共享的,也就是说,库存只有一个“版本”。
根据我的经验,当所有内容都位于一个目录(即,清单,已安装的角色,剧本)为their documentation suggests时,Ansible效果最佳。 保持简单,就共享而言,请尝试介绍其他项目的成员以使用该信息源。
如果出于安全性或团队策略的考虑,请考虑使用Ansible Vault或类似方法来共享机密。
要解决共享变量的问题,您可以考虑使用Cache pluins之一在不同机器上的不同剧本调用之间缓存事实。 这样,您的角色可以引用“来自您的环境”的变量,而不是引用运行该手册的计算机的状态。
最后但并非最不重要的一点是,Ansible解决此问题的方法是实际的商业产品Ansible Tower,运行Ansible剧本的用户界面和API,其核心是一个名为AWX的开源项目。