Ansible Pull: от cron к systemd и мониторингу
Ansible Pull: от cron к systemd и мониторингу
Когда автономных узлов становится много, cron перестаёт быть удобным. Переводим ansible‑pull на systemd timers, добавляем наблюдаемость и защиту от параллельных запусков.
Что делаем
- systemd unit + timer с OnUnitActiveSec и RandomizedDelaySec
- health‑check: webhook/Prometheus (last_run_ts, last_success_ts, changed, failed)
- ротация логов и алёрты при «тишине»
- идемпотентный wrapper с фиксацией статуса
Готовые сниппеты
unit:
[Unit]
Description=Ansible Pull
[Service]
Type=oneshot
ExecStart=/usr/local/bin/ansible-pull-wrapper.sh
timer:
[Unit]
Description=Run Ansible Pull
[Timer]
OnUnitActiveSec=24h
RandomizedDelaySec=1h
Persistent=true
[Install]
WantedBy=timers.target
wrapper:
#!/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>
echo "last_run_ts=$(date +%s)" > /var/lib/ansible-pull/state
Чек‑лист
- timer с рандомизацией
- health‑check endpoint
- алёрты на отсутствие запусков > N часов
- идемпотентный wrapper с lock
Рубрики: Автоматизация → Ansible → Ansible Pull