Зависимости ролей

Тема дорожной карты · Ansible

Зависимости role в Ansible позволяют role автоматически вызывать другие role до выполнения собственных задач. Эти зависимости объявляются в списке dependencies внутри файла meta/main.yml. Когда Ansible разрешает список role play, он обходит граф зависимостей в глубину, что гарантирует выполнение всех зависимых role в указанном порядке. Например, role web_app, зависящая от nginx и python, будет выполнена так, чтобы все её зависимости были завершены перед началом выполнения web_app. Записи зависимостей поддерживают те же параметры, что и обычная ссылка на role — vars, when и tags — что позволяет использовать условные зависимости. По умолчанию Ansible дедублирует role: если две role зависят от common, то common выполняется только один раз. Установите allow_duplicates: true в meta/main.yml зависимой role, чтобы изменить это поведение, если вам необходимы несколько параметризованных вызовов.

Как это работает

Зависимости ролей организуют связанные задачи, файлы, шаблоны, handlers, vars и defaults в переиспользуемую директорную структуру (tasks/, handlers/, templates/, files/, vars/, defaults/, meta/). Play включает роли по имени; ansible-galaxy init <role> создаёт структуру. Роли могут декларировать зависимости в meta/main.yml. Collections (Ansible 2.10+) пакетируют роли + модули + плагины как распространяемые пакеты на Galaxy или приватном хабе. Это позволяет упростить управление и распространение ролей, а также обеспечивает более стабильную среду для разработки и тестирования.

Когда применять

Выносите роль, когда есть логичный кусок, переиспользуемый в 2+ плейбуках (nginx, postgres, prometheus-node-exporter). Используйте готовые роли Galaxy для распространённого — geerlingguy.docker, geerlingguy.postgresql закалены в боях. Запиньте версии ролей в requirements.yml. Узкая ответственность роли (одна роль на сервис). Это позволяет упростить управление и распространение ролей, а также обеспечивает более стабильную среду для разработки и тестирования.

Типичные ошибки

Ловушки Зависимостей ролей: god-роль, делающая 15 вещей (разделите); не запиннены версии Galaxy-ролей (один ansible-galaxy install -r requirements.yml и поведение меняется); роли с захардкоженными distro-путями ломаются на другом OS (используйте ansible_os_family для ветвления); не используете defaults/ для переопределяемых значений (вызывающие не могут кастомизировать).

Связанные понятия

Полезные ресурсы