Ansible Design帮助(服务器,团队,角色,剧本等)



我们正在尝试为机组人员设计一个Ansible系统。

我们有一些公开的问题,使我们停下来思考,也许听到其他想法。

细节:

  • 4个开发团队。
  • 我们为每个程序员持有CI服务器,DB服务器和个人虚拟机。
  • 一个新的程序员会收到一个干净的VM,我们想根据他将要加入的团队为他"准备"它。
  • 我们还想在某些VM上使用Ansible进行每周更新(需要) - 可能是整个团队或我们所有的VMS。
  • A团队和B团队分享了他们的一些需求(例如,他们都使用Django),但是自然的应用程序A团队A用途和B团队没有。

我们做了什么:

  • 我们有旧的"维护" bash脚本,我们转换为yaml脚本。
  • 我们将它们分为Ansible角色
  • 我们有一个库存文件,该文件包含每个团队和我们的服务器的组:

`

[ALL:children]
Team A
Team B
...
[Team A]
...
[Team B]
...
[CIservers]
...
[DBservers]
...
  • 我们有包含我们所有角色的大型剧本(每个角色):

    - hosts: ALL roles: - { role x, tags: 'x' } - { role y, tags: 'y' } ...

  • 我们称之为这样的Ansible:

    ansible-playbook -i inventory -t TAG1,TAG2 -l TeamA play.yml

问题:

  • 我们有一种感觉,我们没有尽可能地使用角色。我们最终扮演了安装和配置的" Mercurial"或" Eclipse"(添加别名,编辑路径,创建符号链接等)和apt_packages的角色(使用APT模块来安装我们需要的软件包)和pip_packages的角色(使用PIP模块安装我们需要的软件包)。
  • 我们的某些角色取决于其他角色(我们使用meta文件夹来声明这些依赖关系)。因为我们的剧本包含我们扮演的所有角色,所以当我们在没有标签的情况下运行它(例如,在新的编程人员VM上),其他角色所依赖的角色正在运行两次(或更多),这是浪费时间。我们教导要删除其他剧本中其他角色的角色,但这不是一个好的解决方案,因为这样我们就可以使自己能够自行执行该角色。

我们不确定如何继续。是否产生角色依赖性并创建剧本,以通过正确的顺序指定角色来实现这些依赖项。我们是否应该将角色更改为Teama或DBServer之类的东西,以团结我们当前的许多角色(在这种情况下,我们如何处理Teama和TeamB之间的常见任务,以及我们如何处理仅与Teama相关的任务?)<)<)

好吧,这就是一切。

预先感谢!

对不起,我想您的团队可能已经弄清楚了解决方案。我怀疑您将拥有group_vars,hosts_vars,角色文件夹和一个site.yml的标准安排结构。

site.yml
group_vars
host_vars
roles
    common
    dbserver
    ciserver

我怀疑您的团队正在尝试将所有内容链接到一个site.yml文件中。这对于根据角色和标签操作的常见任务很好。我建议对于那些边缘情况,您可以在根级别创建第二次或第三本剧本,这可能针对团队或每周部署。在这种情况下,您仍然可以将常见的任务保留在标准结构中,但是您并没有用所有元数据使任务复杂化。

site.yml // the standard ansible way
teamb.yml // we need to do something slightly different  

再次,当您发现实施任务的更好方法时,可以重构剧本,并将任务从特定文件转移到标准角色

似乎您仍在尝试查看当您拥有多个团队时使用的最佳方法,这些方法将在同一团队上工作并且不想影响其他任务。看看这个样板可能会有所帮助。

如果您查看该仓库。您会看到有多个角色,并且可以根据需要设计剧本。

示例: - common.yml (这是所有团队之间的普遍) - 否则您可以使用 teamName.yml project.yml

创建创建

如果您使用以上任何一种,则只需在剧本中定义正确的角色&amp;它应该与正确的主机&amp;组Vars

最新更新