Ответ
Список ролей в плейбуке Ansible — это директория roles: в секции плейбука, где перечисляются роли для применения к целевым хостам. Роль — это автономная, структурированная единица организации задач, переменных, файлов, шаблонов и обработчиков.
Пример использования в плейбуке (playbook.yml):
- name: Configure web and database servers
hosts: all
become: yes
roles:
- common # Базовая настройка (часовой пояс, пользователи)
- nginx # Установка и настройка веб-сервера
- { role: postgresql, tags: database } # Роль с параметрами и тегом
- role: app_deploy
vars:
app_version: "2.1.0"
Ключевые особенности списка ролей:
- Порядок выполнения: Роли выполняются в порядке, указанном в списке, до любых задач, определённых непосредственно в плейбуке.
- Параметризация: Можно передавать переменные роли напрямую в списке, используя синтаксис словаря.
- Условное выполнение и теги: Ролям можно назначать теги (
tags) или условия (when), что позволяет выполнять их выборочно. - Повторное использование: Основная сила ролей — возможность их повторного использования в разных плейбуках и проектах.
Структура роли (например, roles/nginx/):
roles/nginx/
├── tasks/ # Основные задачи (main.yml)
├── handlers/ # Обработчики (например, перезагрузка nginx)
├── templates/ # Шаблоны Jinja2 (nginx.conf.j2)
├── files/ # Статические файлы для копирования
├── vars/ # Переменные роли с высоким приоритетом
├── defaults/ # Переменные по умолчанию (низкий приоритет)
└── meta/ # Зависимости от других ролей
Почему это важно: Использование ролей превращает набор скриптов в управляемую, модульную и легко тестируемую инфраструктуру как код (IaC). Это стандартный подход в Ansible для организации сложных конфигураций.