Ответ
Да, я создавал и поддерживал множество ролей Ansible для стандартизации настройки инфраструктуры. Роли — это отличный способ упаковать повторяющиеся задачи, переменные и шаблоны в переиспользуемые компоненты.
Структура типичной роли, которую я создаю:
roles/
nginx/
tasks/ # Основные задачи
main.yml
handlers/ # Обработчики (например, перезагрузка сервиса)
main.yml
templates/ # Jinja2 шаблоны конфигов
nginx.conf.j2
vars/ # Переменные по умолчанию для роли
main.yml
defaults/ # Переменные с низким приоритетом (для переопределения)
main.yml
meta/ # Зависимости роли
main.yml
Пример задачи из roles/nginx/tasks/main.yml для установки и настройки Nginx на Ubuntu:
- name: Install Nginx
apt:
name: nginx
state: present
update_cache: yes
- name: Deploy Nginx configuration template
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
notify:
- Reload Nginx # Вызов обработчика
- name: Ensure Nginx is running and enabled
service:
name: nginx
state: started
enabled: yes
Пример обработчика (handlers/main.yml):
- name: Reload Nginx
service:
name: nginx
state: reloaded
Использование роли в плейбуке:
- hosts: web_servers
become: yes
roles:
- role: nginx
vars:
nginx_worker_processes: 4
Мой опыт: Роли позволяют легко применять одну и ту же конфигурацию к разным группам серверов, тестировать их отдельно и делиться ими между командами. Я также использовал Ansible Galaxy для загрузки готовых ролей и управления зависимостями через requirements.yml.