Как абстрагировать роли в ansible

У меня есть куча сервисов, которые создаются и развертываются с помощью 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

person Andrey Neverov    schedule 12.03.2015    source источник


Ответы (1)


Похоже, вам нужно настроить общую роль как зависимость. . Создайте каталоги roles/service-foo/meta и roles/service-bar/meta и в каждый из этих каталогов добавьте файл main.yml со списком зависимых ролей:

---
dependencies:
    - { role: common }

common — это просто еще одна роль, хранящаяся в вашем каталоге ролей. Если вы хотите пофантазировать, то зависимые роли можно получить непосредственно из github и т. д. Документация Ansible, на которую я ссылался, содержит все подробности.

person Bruce P    schedule 12.03.2015