Ansible Playbook — основная единица автоматизации в Ansible. Это YAML-файл, описывающий «пьесы» (plays) — последовательности задач, применяемых к определённым группам серверов из инвентаря. Playbook задаёт желаемое состояние инфраструктуры декларативно: не «выполни эту команду», а «убедись, что nginx установлен и запущен».
Структура Playbook
---
- name: Настройка веб-сервера
hosts: webservers
become: yes # выполнять от root (sudo)
vars:
nginx_port: 80
php_version: "8.2"
tasks:
- name: Обновить apt кэш
apt:
update_cache: yes
- name: Установить nginx
apt:
name: nginx
state: present
- name: Установить PHP-FPM
apt:
name: "php{{ php_version }}-fpm"
state: present
- name: Запустить и включить nginx
service:
name: nginx
state: started
enabled: yes
- name: Скопировать конфиг nginx
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/sites-available/default
notify: Перезапустить nginx
handlers:
- name: Перезапустить nginx
service:
name: nginx
state: restarted
Ключевые элементы Playbook:
- hosts — на какие серверы из инвентаря применять.
- tasks — список модулей с параметрами. Ansible имеет 3 000+ встроенных модулей.
- vars — переменные для шаблонизации конфигов (Jinja2).
- handlers — задачи, вызываемые только при изменении (notify). Например, перезапуск nginx только если конфиг изменился.
- roles — повторно используемые структуры Playbook для типовых компонентов (nginx, postgresql, docker).
Идемпотентность
Playbook идемпотентен: повторный запуск не меняет уже настроенную систему. Модуль apt: state: present проверяет, установлен ли пакет, прежде чем устанавливать. Это позволяет запускать Playbook регулярно для проверки соответствия конфигурации.
История
Ansible создан Майклом ДеХааном в 2012 году как агентless-альтернатива Puppet и Chef. Red Hat приобрела Ansible в 2015 году за ~$150 млн. В 2019 году Ansible перешёл под управление Ansible Community и IBM/Red Hat. Ansible Automation Platform (коммерческий продукт) добавляет веб-интерфейс (AWX/Tower) поверх открытого Ansible. Galaxy.ansible.com — репозиторий готовых ролей: более 10 000 ролей для типовых задач.
На что обращать внимание
Ansible работает через SSH без агентов — это упрощает начало работы, но снижает скорость при больших инфраструктурах (1 000+ серверов). Для параллельного выполнения используйте forks: 50 в ansible.cfg. Храните Playbook в Git (git репозитории) — это Infrastructure as Code. Секреты (пароли, ключи API) шифруйте через Ansible Vault командой ansible-vault encrypt vars/secrets.yml. Не пишите задачи через shell: там, где есть идемпотентный модуль — это ломает идемпотентность.
Ansible Playbook на практике
Ansible Playbook — YAML-файл, описывающий состояние сервера. Ansible выполняет tasks последовательно: установка пакетов, копирование файлов, перезапуск сервисов. Idempotency: повторный запуск не изменяет уже применённые настройки. Роли организуют повторно используемые компоненты: role nginx, role php, role mysql. Git-интеграция: playbooks хранятся в репозитории, версионируются. SSH: Ansible подключается к серверам по SSH-ключам без установки агентов. Альтернативы: Puppet (агент-based), Chef (Ruby DSL). Vault: Ansible Vault шифрует чувствительные переменные (пароли, токены) прямо в playbook.