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

Ответ

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

Ответ 18+ 🔞

А, ну слушай, про роли в Anсибле! Это же, блядь, основа основ, ебать мои старые костыли. Если ты до сих пор пишешь плейбуки одной простыней в тысячу строк — ты, прости, распиздяй и смерд пердящий. Роли — это как раз то, что превращает твой бардак в нормальную, модульную хуйню, которую можно переиспользовать.

Вот смотри, в плейбуке есть такая секция roles:. Это как список гостей на твою вечеринку по настройке серверов. Ты просто перечисляешь, кто должен прийти и в каком порядке.

Вот как это выглядит в деле (playbook.yml):

- name: Настраиваем веб и базу
  hosts: all
  become: yes
  roles:
    - common          # Сначала база — часовой пояс, пользователи, всякая обязательная фигня
    - nginx           # Потом веб-сервер ставим
    - { role: postgresql, tags: database } # А вот это уже роль с параметром, чтоб только по тегу запускать
    - role: app_deploy
      vars:
        app_version: "2.1.0" # И сюда переменные свои пихаем

Что тут важно понять, ёпта:

  • Порядок — всё: Они отработают ровно в том порядке, в котором ты их написал. И что самое главное — до всех задач, которые ты напишешь прямо в плейбуке. Не перепутай.
  • Можно навешивать хуйню: Теги (tags), условия (when) — всё как у людей. Хочешь запустить только базу? ansible-playbook site.yml --tags database и похуй на всё остальное.
  • Сила в переиспользовании: Вот это, блядь, главный кайф. Написал роль для установки nginx один раз — и таскай её из проекта в проект, как шлюху дешёвую. Никакого копипаста, один хер.

А внутри-то какая структура, спросишь? Да вот, смотри, обычная роль nginx выглядит как папка:

roles/nginx/
├── tasks/          # Главный файл с задачами (main.yml) — тут вся основная работа
├── handlers/       # Обработчики (например, команда на перезагрузку nginx после изменения конфига)
├── templates/      # Шаблоны Jinja2 (например, nginx.conf.j2) — чтоб конфиги были гибкие
├── files/          # Просто статические файлы, которые надо скопировать как есть
├── vars/           # Переменные для роли — приоритет высокий, перебивают defaults
├── defaults/       # Переменные по умолчанию (низкий приоритет) — если ничего не передали, будут они
└── meta/           # Зависимости — тут пишешь, какие другие роли нужно выполнить ДО этой

Итог, чувак: Если не используешь роли, то ты просто ебанько, который усложняет себе жизнь. Это стандарт де-факто для организации всего этого пизда рулю под названием IaC (Infrastructure as Code). Всё становится чисто, понятно и, главное, не вызывает волнение ебать при попытке что-то изменить через полгода.