Что такое список ролей (roles) в Ansible playbook?

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

Ответ

Список ролей в плейбуке 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 для организации сложных конфигураций.