Какие директории могут находиться в Ansible Role?

«Какие директории могут находиться в Ansible Role?» — вопрос из категории Ansible, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стандартная структура Ansible Role включает следующие директории:

  • tasks/ — содержит основной файл задач main.yml. Здесь определяются шаги, которые выполняет роль.
  • handlers/ — хранит обработчики, обычно для перезапуска сервисов (например, handlers/main.yml).
  • templates/ — для файлов шаблонов Jinja2 (с расширением .j2), которые будут обработаны и скопированы на целевые хосты.
  • files/ — для статических файлов, которые копируются на управляемые узлы без изменений.
  • vars/ — переменные роли с высоким приоритетом, которые переопределяют значения по умолчанию.
  • defaults/ — переменные роли по умолчанию с самым низким приоритетом; их легко переопределить.
  • meta/ — содержит метаданные роли, такие как зависимости от других ролей в файле meta/main.yml.
  • tests/ — может содержать тестовые плейбуки и инвентари для проверки роли.
  • library/ (опционально) — для размещения пользовательских модулей Ansible, специфичных для этой роли.

Пример структуры в файловой системе:

my_role/
├── tasks/
│   └── main.yml
├── handlers/
│   └── main.yml
├── templates/
│   └── nginx.conf.j2
├── files/
│   └── custom_script.sh
├── vars/
│   └── main.yml
├── defaults/
│   └── main.yml
├── meta/
│   └── main.yml
└── tests/
    ├── inventory
    └── test.yml

На практике я чаще всего работаю с tasks/, handlers/, templates/ и defaults/. Директория meta/ критически важна для управления зависимостями между ролями в больших проектах.