多团队/产品场景下Ansible角色与剧本的架构重组咨询
Ansible架构拆分方案选择与落地
背景
我们最初遵循Ansible最佳实践构建环境,但单Git仓库的架构如今已难以维护,因此计划重组Ansible结构并拆分为多个Git仓库。
我们的场景是拥有复杂系统,多个团队在专属测试环境开发包含应用、数据库等的解决方案,此前所有团队共用一个含roles和playbooks目录的单Git仓库,现有结构如下:
- group_vars - host_vars - inventory - roles - team1_role - tasks - sqlite.yml - app1_1.yml - app1_2.yml - team2_role - tasks - sqlite.yml - app2_1.yml - app2_2.yml - team3_role -... - playbooks - team1_playbook - team1.yml --> 该剧本在host1安装sqlite,在host2部署app1_1和app1_2 - team1_action1.yml --> 该剧本执行维护操作,例如更新密码 - team2_playbook - team2.yml --> 该剧本在host3安装sqlite,在host2部署app2_1和app2_2 - all.yml
拆分方案调研
经调研,我们确定为每个团队的角色单独创建仓库,并创建存放sqlite.yml等公共内容的common_role仓库,按应用拆分仓库对我们并无益处。但对于剧本的处理方式,我们面临三个选项:
- 为每个团队单独创建第二个仓库存放剧本
- 允许所有团队访问并编辑存放所有剧本的中央Ansible仓库
- 为每个团队创建单一仓库,同时存放角色与剧本,调整后架构如下:
- team1 - roles - playbooks - team2 - roles - playbooks
我们希望基于实践经验得到合适的推荐方案。
最终选定方案
最终我们选定了第三个方案,虽不符合Ansible最佳实践,但短期内让每个团队在单一仓库中维护角色与剧本对我们更具可行性。同时我们还将搭建公共inventory仓库和公共角色仓库(长期可能改为按角色拆分仓库),最终架构如下:
- group_vars - host_vars - inventory - common_roles - sqlite.yml - teams - team1 - roles - app1_1.yml - app1_2.yml - playbooks - team1.yml - team2 - roles - app2_1.yml - app2_2.yml - playbooks - team2.yml - team3 -...
内容的提问来源于stack exchange,提问作者eatheril
相关产品推荐
相关产品推荐

