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