Как автоматизировать запуск Ansible playbook?

«Как автоматизировать запуск Ansible playbook?» — вопрос из категории Ansible, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В моих проектах автоматизация запуска Ansible достигается несколькими способами, в зависимости от контекста.

1. Планировщик задач (Cron) для рутинных операций: Использую для регулярных задач, таких как обновление конфигураций или сбор метрик.

# /etc/crontab - ежедневный прогон playbook в 2:00
0 2 * * * ansible-playbook -i /etc/ansible/prod_inventory /opt/ansible/playbooks/daily_config_sync.yml

2. CI/CD пайплайны для deployment: Интегрирую Ansible в этапы сборки и развертывания. Например, в GitLab CI:

# .gitlab-ci.yml
deploy_to_staging:
  stage: deploy
  script:
    - ansible-playbook -i inventory/staging deploy_app.yml --extra-vars "git_sha=$CI_COMMIT_SHA"

3. Systemd таймеры для сложных расписаний: Более надежная альтернатива cron для системных задач.

# /etc/systemd/system/ansible-maintenance.timer
[Timer]
OnCalendar=Mon *-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target

4. Использование AWX/Ansible Tower: Для enterprise-проектов настраиваю централизованное управление через AWX (open-source версию Tower), где можно планировать задания, управлять инвентарями и контролировать доступ через RBAC.

Ключевые практики:

  • Всегда использую SSH-ключи с агентами для аутентификации.
  • Для секретов применяю Ansible Vault, храня зашифрованные файлы в репозитории.
  • Перед автоматизацией запускаю playbook с флагом --check --diff для предварительной проверки изменений.
  • Настраиваю централизованное логирование через ANSIBLE_LOG_PATH для аудита.