Короткий ответ
Роль — это переиспользуемый пакет автоматизации со стандартизированной структурой папок (tasks, handlers, templates, files, defaults, vars, meta), который можно подключать к разным playbook и окружениям; вынесение логики в роль избавляет от дублирования и упрощает повторное использование между проектами.
Как это работает подробнее
Ansible автоматически подхватывает файлы роли по соглашению об именах — tasks/main.yml выполняется при подключении роли, handlers/main.yml содержит обработчики уведомлений, templates/ хранит Jinja2-шаблоны конфигов, defaults/main.yml задаёт переменные с низким приоритетом (легко переопределить), vars/main.yml — с высоким.
Пример кода
example.txt
roles/
nginx/
tasks/main.yml
handlers/main.yml
templates/nginx.conf.j2
defaults/main.ymlЧто использовать на практике
- Практика. роли публикуют и переиспользуют через Ansible Galaxy или приватный репозиторий; типичный playbook сводится к списку ролей, применяемых к группе хостов, что делает его компактным и декларативным.
Подводные камни
- Ошибка. путать
defaultsиvarsпо приоритету переопределения, из-за чего переменная изgroup_varsнеожиданно не переопределяет значение изvars/main.ymlроли; складывать все задачи проекта в одну "универсальную" роль вместо логического разделения.