ansible-lint и yamllint

Тема дорожной карты · Ansible

Лучшие практики линтинга для Ansible основаны на ansible-lint — стандартном инструменте статического анализа, который проверяет playbook, role и collection по настраиваемому набору правил, охватывающих корректность, стиль и безопасность. Запуск ansible-lint playbook.yml в pre-commit хуке или CI-конвейере выявляет типичные проблемы заблаговременно — устаревшие имена модулей, задачи без поля name, использование command там, где существует специализированный модуль, и нарушения форматирования YAML. Файл .ansible-lint в корне проекта управляет активными профилями правил (basic, moderate, safety, shared) и исключаемыми путями, что упрощает постепенное внедрение линтинга в существующую кодовую базу. Лучшие практики линтинга также рекомендуют сочетать ansible-lint с yamllint для чистого форматирования YAML и ansible-playbook --syntax-check для структурной валидации до того, как код попадёт в промежуточную среду.

Как это работает

ansible-lint и yamllint для 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-lint и yamllint: "ansible — это просто конфиг, тесты не нужны" (он меняет реальную инфру на опечатке); ad-hoc команды с ноутов в prod (нет аудита, нет ревью); пропуск --check --diff когда уже "опытный" (Мёрфи никогда в отпуске); нет версионирования inventory (откуда эта группа?). Относитесь к ansible как к infra-коду с той же строгостью, что и к app-коду.

Связанные понятия

Полезные ресурсы