Блог "Дети ОИТа"
/поиск

Ansible Pull: идемпотентность, preflight и откаты

Ansible Pull: идемпотентность, preflight и откаты

Как безопасно обновлять автономные узлы и быстро возвращаться к рабочему состоянию.

Подход

  • preflight: диск, память, сеть, доступность репозитория
  • версионирование: git tag → переменная роли/плейбука
  • lock-файл: защита от параллельных запусков
  • откат: тег last-good и быстрый redeploy

Готовые сниппеты

preflight.yml:

  • name: Preflight checks
    hosts: all
    gather_facts: false
    tasks:
    • name: Disk free > 1 GiB
      ansible.builtin.stat:
      path: /
      register: root_fs
    • name: Fail if low on disk
      ansible.builtin.fail:
      msg: Low on disk
      when: root_fs.stat.size - root_fs.stat.used < 1073741824

wrapper с lock:
#!/usr/bin/env bash
set -euo pipefail
LOCK=/var/run/ansible-pull.lock
exec 200>$LOCK
flock -n 200 || exit 0
/usr/bin/ansible-pull -U <repo> -i <inventory> -C <branch> --tags=deploy

Playbook с откатом:

  • name: Deploy with rollback
    hosts: all
    tasks:
    • name: Deploy
      import_role: name=app
    • name: Tag last-good on success
      command: git tag -f last-good HEAD
      when: not ansible_check_mode

Чек‑лист

  • preflight и таймауты
  • lock-файл
  • тег last-good и шаг отката

Рубрики: Автоматизация → Ansible → Ansible Pull