Что такое Ansible Role и какова его структура?

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

Ответ

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, которые можно использовать как есть или за основу.