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
- name: Disk free > 1 GiB
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
- name: Deploy
Чек‑лист
- preflight и таймауты
- lock-файл
- тег last-good и шаг отката
Рубрики: Автоматизация → Ansible → Ansible Pull