Ansible的集成级别:角色和剧本之间

时间:2019-02-27 13:08:32

标签: ansible dependencies

我正在寻找以下问题的解决方案:
我们有一些剧本级代码(许多角色,在不同的主机上运行),我们希望在项目之间重用。

我找不到一种将其他人的剧本整合到我的剧本中的深思熟虑(无缝/良好/等)的方法。

集成要点:

  • 剧本及其角色的销售以及适当的依赖性管理
  • 能够清楚地看到和命名所供应的东西
  • 更新供应商依赖性的能力
  • 内部构件的隔离(我不想触发某些意外的处理程序和/或set_fact某人的变量以掩盖其价值)

另一个问题是如何在git中处理此问题(如果有git级集成)。

是否有一些最佳实践来进行这种集成?它们存在吗?

(就此,我决定为此使用git-vendor,但我希望有更好的方法)。

1 个答案:

答案 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的开源项目。