Ответ
Ansible Role — это автономный, многократно используемый компонент, который инкапсулирует задачи, переменные, файлы, шаблоны и обработчики для настройки определенной службы или функции (например, установка Nginx, настройка пользователей). Роли позволяют структурировать плейбуки, делая их модульными и легко читаемыми.
Стандартная структура роли:
nginx/ # Имя роли
├── defaults/ # Переменные по умолчанию (низший приоритет, можно переопределить)
│ └── main.yml # (например, `nginx_port: 80`)
├── vars/ # Переменные роли (высокий приоритет)
│ └── main.yml
├── tasks/ # Основной список задач роли
│ └── main.yml
├── handlers/ # Обработчики, которые вызываются задачами по уведомлению (notify)
│ └── main.yml # (например, перезапуск службы nginx)
├── templates/ # Шаблоны Jinja2
│ └── nginx.conf.j2
├── files/ # Статические файлы для копирования
│ └── custom-error.html
├── meta/ # Метаданные: зависимости от других ролей, информация об авторе
│ └── main.yml
└── README.md # Документация по роли
Пример использования роли в плейбуке:
# site.yml
- hosts: webservers
become: yes
roles:
- role: nginx
vars:
nginx_port: 8080
- role: letsencrypt # Роль будет автоматически загружена из каталога `roles/`
Преимущества использования ролей:
- Повторное использование: Одну и ту же роль можно применить к разным группам хостов.
- Стандартизация: Упрощает совместную работу и обмен настройками внутри команды.
- Упрощение плейбуков: Основной плейбук становится декларативным списком ролей, а сложная логика скрыта внутри них.
- Поддержка сообщества: Существует огромный каталог готовых ролей на Ansible Galaxy, которые можно использовать как есть или за основу.