Как последовательно развертывать Ansible role на нескольких серверах?

«Как последовательно развертывать Ansible role на нескольких серверах?» — вопрос из категории Ansible, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для последовательного (rolling) развертывания роли на группе хостов используется параметр serial в плейбуке. Он контролирует, сколько хостов обрабатывается одновременно, что критично для обновлений без простоя (zero-downtime).

Пример базового использования:

- name: Apply security updates to web servers
  hosts: webservers
  serial: 1  # Обрабатывать строго по одному серверу
  roles:
    - security_updates

Сложные стратегии: Можно задавать процент от общего числа хостов или список шагов.

  serial:
    - 1        # Первый хост (кандидат для smoke-теста)
    - "30%"    # Затем 30% от оставшихся
    - "100%"   # Все остальные

Контроль ошибок: Параметр max_fail_percentage позволяет прервать выполнение при превышении порога неудач.

  serial: 2
  max_fail_percentage: 25  # Остановиться, если >25% хостов в текущей партии упадут

На практике я использую serial вместе с обработчиками (handlers) для перезапуска сервисов и паузами (pause) для ручной проверки после каждой партии.