Playbooks
Тема дорожной карты · Ansible
Playbook — это YAML-файлы, описывающие упорядоченную последовательность задач, которые Ansible должен выполнить на одной или нескольких группах хостов inventory. Playbooks являются основным инструментом для управления конфигурациями, развёртывания приложений и многоуровневой оркестрации в Ansible. Их использование позволяет автоматизировать сложные процессы и управлять ими с высокой степенью детализации и контроля.
Playbook состоит из одного или нескольких play, каждый из которых сопоставляет набор задач с целевой группой хостов, определённой ключом hosts. Запуск playbook осуществляется с помощью команды ansible-playbook site.yml, которая может включать опциональные параметры, такие как -i inventory/ для указания inventory, -l webservers для ограничения выполнения подмножеством хостов или --check для dry-run.
Как это работает
Playbooks представляют собой стандартную единицу в Ansible: это YAML-файлы, содержащие списки play. Каждый play включает в себя ключи hosts, tasks, а также опциональные ключи pre_tasks, post_tasks, handlers, vars и roles. Задачи выполняются последовательно для каждого хоста, а handlers запускаются только при активации триггера (notify). Strategy управления параллелизмом включает в себя режимы linear (дефолт, который ожидает медленного выполнения) и free (каждый хост выполняется так быстро, как это возможно). Tags позволяют запускать подмножества задач (--tags backup), а ключ --start-at-task позволяет возобновить выполнение после сбоя.
Когда применять
Playbooks следует использовать всегда, когда нужно оборачивать связанные операции. Даже если вы начинаете с одной задачи, она может быстро расти и усложняться. Используйте pre_tasks для выполнения setup, который должен идти первым; handlers для реализации идиомы "перезапустить X, если конфиг изменился"; и tags для частичных запусков. Для постепенной выкатки (canary) используйте параметры serial: 1 или serial: 25%. Тестируйте playbook с помощью параметров --check --diff в CI-среде против staging-inventory для проверки изменений.
Типичные ошибки
Обычно playbooks сталкиваются с несколькими типичными ошибками. Это могут быть длинные плейбуки без использования tags, что требует запуска всего playbook для тестирования одной секции. Также часто встречается использование ignore_errors: true повсюду, что может привести к тихим сбоям. Отсутствие использования блоков block + rescue + always для обработки ошибок также является распространённой проблемой. Кроме того, ошибки отступов YAML могут вызывать проблемы, поэтому рекомендуется использовать линтер, такой как ansible-lint. Также следует избегать использования ключа become: true на уровне play, если требуется root-доступ только для одной задачи.