Ответ
Playbook в Ansible — это YAML-файл, который описывает желаемое состояние инфраструктуры через последовательность плейов (plays) и задач (tasks). Это основной инструмент для декларативной автоматизации конфигурации.
Ключевые элементы структуры playbook:
-
Play: Определяет, на каких хостах (из инвентаря) и под каким пользователем выполнять задачи. Playbook может содержать несколько плейов.
hosts:Целевая группа хостов (например,webservers,dbservers,all).become:Активирует повышение привилегий (например,become: yesдля выполнения задач от root).vars:Определение переменных, специфичных для этого плейа.tasks:Список задач для выполнения.
-
Task: Конкретное действие, которое Ansible должен выполнить на целевых хостах. Использует модули (встроенные команды).
- Каждая задача имеет
name:(человекочитаемое описание) и вызывает модуль с его параметрами.
- Каждая задача имеет
-
Handler: Специальный тип задачи, который вызывается только по уведомлению (
notify) из других задач. Обычно используется для перезапуска служб после изменения их конфигурации. -
Roles (Роли): Для переиспользования и организации кода. Роль — это автономная структура каталогов, содержащая tasks, handlers, vars, templates и файлы. В playbook роли включаются директивой
roles:.
Пример базового playbook для настройки веб-сервера Nginx:
---
# playbook.yml
- name: Configure and deploy Nginx on web servers
hosts: webservers # Группа из инвентарного файла
become: yes # Выполнять задачи с правами sudo
vars:
http_port: 8080
max_clients: 200
tasks:
# 1. Установка пакета
- name: Ensure Nginx is installed
apt:
name: nginx
state: latest
update_cache: yes
# 2. Копирование шаблона конфигурации
- name: Copy Nginx configuration template
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: # Уведомление хендлера
- Restart Nginx
# 3. Проверка синтаксиса конфигурации
- name: Validate Nginx configuration
command: nginx -t
register: nginx_test
changed_when: false # Задача никогда не считается 'изменившей' состояние
failed_when: nginx_test.rc != 0
handlers:
# Хендлер, который выполнится только если его уведомили и были изменения
- name: Restart Nginx
service:
name: nginx
state: restarted
Такой подход позволяет чётко разделять логику (tasks), конфигурацию (vars, templates) и побочные действия (handlers), делая playbook читаемым и поддерживаемым.