Ответ
Это три уровня абстракции для организации кода Ansible, от конкретного сценария до переиспользуемых библиотек.
1. Playbook (Плейбук)
- Что это: Исполняемый YAML-файл, который описывает конкретный сценарий развертывания или конфигурации. Это точка входа для запуска
ansible-playbook. - Содержимое: Список
plays, которые определяют, на каких хостах (hosts) и в каком порядке выполняютсяtasks. - Пример (
deploy_web.yml): - name: Deploy Nginx and configure firewall
hosts: webservers
become: yes
vars:
http_port: 80
tasks:
- name: Ensure Nginx is installed apt: name: nginx state: latest
- name: Allow HTTP traffic
ufw:
rule: allow
port: "{{ http_port }}"
2. Role (Роль)
- Что это: Набор переиспользуемых компонентов (задачи, обработчики, файлы, шаблоны, переменные), сгруппированных по стандартной структуре каталогов. Роль инкапсулирует логику настройки одного сервиса или компонента (например,
nginx,postgresql,java). - Зачем: Чтобы избежать дублирования кода в плейбуках. Роль можно параметризовать через переменные.
- Структура:
roles/ common/ tasks/main.yml # Основные задачи роли handlers/main.yml # Обработчики (handlers) templates/nginx.conf.j2 # Jinja2 шаблоны files/script.sh # Статические файлы vars/main.yml # Переменные по умолчанию defaults/main.yml # Переменные с низким приоритетом meta/main.yml # Зависимости от других ролей - Использование в плейбуке:
- hosts: webservers
roles:
- role: nginx
vars:
nginx_worker_processes: 4
- role: nginx
vars:
nginx_worker_processes: 4
3. Collection (Коллекция)
- Что это: Пакет для распространения содержимого Ansible. Это формат упаковки, который может содержать роли, модули, плагины и документацию. Аналог пакета (gem, pip package) для экосистемы Ansible.
- Зачем: Официальный способ делиться и устанавливать сторонние модули и роли. Позволяет иметь пространства имен (например,
community.general,ansible.posix). - Установка и использование:
# Установка коллекции из Ansible Galaxy ansible-galaxy collection install community.docker
Использование модуля из коллекции в задаче
- name: Create a Docker container
community.docker.docker_container:
name: my_app
image: nginx:latest
Итог: Playbook — это сценарий, который запускается. Role — это переиспользуемый строительный блок внутри плейбука. Collection — это способ установить и использовать сторонние роли и модули с гарантией совместимости.