Ответ
Параметр serial в Ansible задает стратегию выполнения плейбука на группе хостов, ограничивая количество хостов, на которых задачи выполняются параллельно в один момент времени. По умолчанию Ansible выполняет плейбук одновременно на всех хостах из указанной группы (hosts: all). serial критически важен для операций, требующих осторожного, пошагового развертывания, чтобы избежать полного простоя сервиса или перегрузки инфраструктуры.
Основные сценарии использования:
- Rolling update (постепенное обновление): Обновление приложений на кластере веб-серверов по частям.
- Контроль нагрузки: Ограничение одновременных подключений к базе данных или внешнему API во время выполнения задач.
- Минимизация риска: Если задача может потенциально завершиться сбоем,
serialограничивает "зону поражения".
Примеры синтаксиса:
-
Фиксированное количество хостов:
- name: Apply security patches to web servers hosts: webservers serial: 2 # Одновременно обрабатывается только 2 хоста из группы tasks: - name: Update all packages apt: update_cache: yes upgrade: dist -
Процент от группы:
- name: Restart service with percentage hosts: app_servers serial: "30%" # На каждом "шаге" обрабатывается 30% хостов группы -
Сложный rolling update (поэтапное увеличение батча):
- name: Complex rolling deployment hosts: production serial: - 1 # Сначала на одном хосте (например, для smoke-теста) - 30% # Затем на 30% оставшихся - 100% # И наконец на всех остальных
Важное замечание по обработке ошибок: Если выполнение задачи завершится с ошибкой на одном из хостов в текущей "партии" (serial batch), выполнение на всех хостах этой партии будет прервано, а на оставшиеся хосты в группе задача не пойдет. Это поведение можно изменить с помощью директив max_fail_percentage или any_errors_fatal.