如何在ansible中抽象角色

时间:2015-03-12 20:11:59

标签: ansible infrastructure

我有一堆服务,使用ansible构建和部署。 每个服务都由它自己的团队管理,具有独立的存储库,它们彼此完全独立。 我有一些ansible角色在所有服务(如安装的包,Web服务器等)中都是相同的。 有没有办法抽象这样的角色,例如在不同的存储库或某种类型的包中,并将它们作为另一个ansible角色的依赖包括在内?

示例:

service-foo/
  play.yml – includes all roles
  roles/
    common – the same!
    db-foo 
    web-foo

service-bar/
  play.yml – includes all roles
  roles/
    common – the same!
    db-bar
    web-bar

我希望它看起来像这样:

role-storage?
  common

service-foo/
  play.yml - includes common as external dependency as well
  roles/
    db-foo
    web-foo

service-bar/
  play.yml - includes common as external dependency as well
  roles/
    db-bar
    web-bar

1 个答案:

答案 0 :(得分:3)

听起来你想要做的就是将共同角色设置为dependency。创建目录roles/service-foo/metaroles/service-bar/meta,并在每个目录中添加一个列出依赖角色的main.yml:

---
dependencies:
    - { role: common }

common只是存储在您的角色目录中的另一个角色。如果你想获得幻想,那么可以直接从github等中提取相关角色。我链接到的Ansible文档提供了所有细节。