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

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