Структура проекта
Тема дорожной карты · Ansible
Лучшие практики структуры проекта для Ansible определяют организацию репозитория так, чтобы playbook, role, inventory, переменные и тесты были легко доступны и удобны в сопровождении по мере роста кодовой базы. Рекомендуемая структура отделяет корневые playbook (например, site.yml, deploy.yml) от каталога roles/, помещает inventory по средам в inventory/production/ и inventory/staging/, а общие переменные хранит в подкаталогах group_vars/ и host_vars/, соответствующих именам групп и хостов inventory. Лучшие практики структуры проекта также предписывают наличие ansible.cfg в корне репозитория для задания пути к inventory по умолчанию и общих настроек, requirements.yml для фиксации зависимостей от внешних role и collection, и каталога molecule/ для сценариев тестирования role. Следование единообразной структуре проекта позволяет новым членам команды быстро разобраться в кодовой базе автоматизации и гарантирует, что инструменты ansible-lint и molecule обнаруживают содержимое без дополнительной настройки.
Как это работает
Структура проекта для production: пиньте каждую collection + role-версию, шифруйте все секреты Vault'ом, разделяйте prod/staging-inventory, гоняйте плейбуки из CI (не с ноутов), тестируйте --check --diff против staging сначала, ansible-lint + yamllint в CI, структурируйте проекты по рекомендуемой раскладке Ansible (group_vars, host_vars, roles/, collections/, playbooks/), версионируйте всё включая inventories, периодический drift-detection.
Когда применять
Применяйте с первого дня — ретрофит потом болезненный. К ansible-коду — те же ревью-стандарты, что и к app. Molecule — для тестов ролей в изоляции. ansible-lint сразу; правила ловят реальные баги (no-changed-when, no-handler, risky-shell-pipe). Заведите runbook для редкого сценария "откат".
Типичные ошибки
Ловушки Структура проекта: "ansible — это просто конфиг, тесты не нужны" (он меняет реальную инфру на опечатке); ad-hoc команды с ноутов в prod (нет аудита, нет ревью); пропуск --check --diff когда уже "опытный" (Мёрфи никогда в отпуске); нет версионирования inventory (откуда эта группа?). Относитесь к ansible как к infra-коду с той же строгостью, что и к app-коду.