如何在ansible中抽象角色

How to abstract roles in ansible

我有一堆服务,它们是用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

听起来您想做的是将公共角色设置为 dependency。创建目录 roles/service-foo/metaroles/service-bar/meta 并在每个目录中添加一个 main.yml 列出从属角色:

---
dependencies:
    - { role: common }

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