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

Шпаргалка: Ansible Pull — production-ready

Ключевые практики для ansible-pull в production

1. Preflight checks (обязательно)

  • Диск: >1 GiB свободно на корне
  • Память: >512 MiB свободно
  • Сеть: доступен git-репозиторий
  • Права: запись в /var/lib/ansible/pull

2. Защита от параллельных запусков

LOCK=/var/run/ansible-pull.lock
exec 200>$LOCK
flock -n 200 || exit 0

3. Версионирование

  • Использовать git tags, а не latest
  • Переменная в роли: {{ lookup('env', 'ANSIBLE_TAG', 'last-good') }}

4. Откат

  • Тег last-good обновляется только при успехе
  • Отдельный playbook для быстрого redeploy

5. Мониторинг

  • systemd таймер + journal
  • Prometheus textfile collector для статуса
  • Алерты при ansible_pull_success == 0

6. systemd unit (production)

[Unit]
Description=Ansible Pull
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/bin/ansible-pull -U {{ repo_url }} -C {{ git_tag }}
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

7. Чек-лист перед деплоем

  • Preflight пройден
  • Lock-файл работает
  • Тег зафиксирован
  • Алерты настроены
  • Откат протестирован

8. Безопасность (добавлено)

  • Использовать HTTPS с token вместо SSH
  • Секреты через systemd Environment или Vault
  • Preflight с --check и --diff
  • Структурированное логирование в JSON

9. Ротация логов

/var/log/ansible-pull/*.log {
    weekly
    rotate 12
    compress
    delaycompress
    missingok
    notifempty
    create 0640 root adm
}