Как версионировать плейбуки в Ansible?

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

Ответ

Для версионирования плейбуков Ansible я использую Git с семантическим версионированием (SemVer). Все инфраструктурные конфигурации хранятся в репозитории с четкой структурой и тегами.

Структура репозитория:

infrastructure/
├── ansible/
│   ├── playbooks/
│   │   ├── deploy_app.yml
│   │   └── configure_db.yml
│   ├── roles/
│   │   ├── nginx/
│   │   └── postgresql/
│   ├── inventories/
│   │   ├── production/
│   │   └── staging/
│   ├── group_vars/
│   ├── host_vars/
│   └── ansible.cfg
├── terraform/
├── scripts/
└── README.md

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

  1. Тегирование версий:

    git tag -a v1.3.0 -m "Add PostgreSQL 14 support and TLS configuration"
    git push origin v1.3.0
  2. Управление зависимостями через requirements.yml:

    # ansible/requirements.yml
    - src: https://github.com/geerlingguy/ansible-role-nginx
     version: 3.1.0
     name: nginx_role
    
    - src: git@internal.gitlab.com:infra/postgres-role.git
     version: v2.0.1
     name: postgresql

    Установка: ansible-galaxy install -r requirements.yml

  3. Хранение секретов: Все чувствительные данные (пароли, ключи) шифрую с помощью ansible-vault:

    ansible-vault encrypt inventories/production/group_vars/all/vault.yml
  4. CI/CD интеграция: В GitLab CI/CD запускаю линтер ansible-lint и тесты с molecule перед созданием тега.

  5. Документация изменений: Веду CHANGELOG.md в формате Keep a Changelog для отслеживания изменений между версиями.