我们正在努力为我们的船员设计一个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
问题:
meta
文件夹来声明这些依赖项)。因为我们的playbook包含我们拥有的所有角色,所以当我们运行它时没有标签(例如,在新的程序员VM上),其他角色所依赖的角色运行两次(或更多),这是浪费时间。我们教会从我们的剧本中删除其他人所依赖的角色,但这不是一个好的解决方案,因为这样我们就失去了自己运行该角色的能力。我们不确定如何从这一点继续。是否通过以正确的顺序指定角色来产生角色依赖关系并创建实现这些依赖关系的playbooks。 我们是否应该将我们的角色更改为TeamA或DBserver,这些角色将统一我们当前的许多角色(在这种情况下,我们如何处理TeamA和TeamB之间的常见任务以及我们如何处理仅与TeamA相关的任务?)< / p>
嗯,这就是一切。
提前致谢!
答案 0 :(得分:0)
对于迟到的回答感到抱歉,我猜你的团队现在可能已经找到了解决方案。我怀疑你将拥有标准的ansible结构,其中包含group_vars,hosts_vars,一个角色文件夹和一个site.yml,如下面的大纲
site.yml
group_vars
host_vars
roles
common
dbserver
ciserver
我怀疑您的团队正在尝试将所有内容链接到一个site.yml文件中。这适用于基于角色和标记操作的常见任务。我建议在这些边缘情况下,您在根级别创建第二个或第三个playbook,这可以特定于团队或每周部署。在这种情况下,您仍然可以将常见任务保留在标准结构中,但是您不会将所有元素的任务复杂化。
site.yml // the standard ansible way
teamb.yml // we need to do something slightly different
同样,当您发现实现任务的更好方法时,可以重构剧本,并将任务从特定文件移动到标准角色
答案 1 :(得分:0)
当您有多个团队在同一工作并且不想影响其他任务时,您似乎仍在尝试使用ansible的最佳方法。看看这个boilerplate可能会有帮助。
如果您查看该仓库。您将看到有多个角色,您可以根据需要设计剧本。
示例: - common.yml (这在所有团队中都是常见的) -另外,您可以使用 teamname.yml 或 project.yml
创建如果您使用上述任何一种方法,则只需要在剧本中定义适当的角色即可,并且应与正确的主持人和组变量相关联。