В чем разница между roles и groups в Ansible?

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

Ответ

Groups (группы) и Roles (роли) — это фундаментально разные концепции в Ansible, работающие на разных уровнях.

Группы (Groups)

  • Уровень: Инвентарь (Inventory).
  • Назначение: Логическое объединение хостов для таргетирования задач.
  • Пример: В файле инвентаря inventory.ini:

    [webservers]
    web-server-01.example.com
    web-server-02.example.com
    
    [databases]
    db-master.example.com
    db-replica.example.com

    В плейбуке вы можете применить задачи ко всей группе:

    - hosts: webservers
      tasks:
        - name: Ensure nginx is installed
          ansible.builtin.apt:
            name: nginx
            state: present

Роли (Roles)

  • Уровень: Организация кода плейбука.
  • Назначение: Модульная, повторно используемая единица, инкапсулирующая задачи, обработчики, файлы, шаблоны и переменные.
  • Структура:
    roles/
      common/
        tasks/
          main.yml        # Основные задачи роли
        handlers/
          main.yml        # Обработчики
        templates/
          nginx.conf.j2   # Шаблоны Jinja2
        defaults/
          main.yml        # Значения переменных по умолчанию
        vars/
          main.yml        # Переменные роли
  • Использование: Роли включаются в плейбуки, что делает код чище и удобнее для повторного использования.
    - hosts: webservers
      roles:
        - role: common
        - role: nginx

Итог: Группы отвечают на вопрос «где выполнять?» (на каких хостах), а роли — «что выполнять?» (какие задачи и конфигурации применить).