Ansible решает много задач, но даже в простых плейбуках можно допустить ошибки. Линтеры помогают находить проблемы до запуска в продакшен, делая код стабильным и читаемым.
Использовать линтеры в Ansible нужно, чтобы:
✅ обнаружить синтаксические ошибки до запуска playbook;
✅ соблюсти единый стиль кода;
✅ выявить потенциальные уязвимости;
✅ интегрировать в CI/CD для автоматической проверки перед деплоем.
Популярные линтеры для Ansible
1️⃣ ansible-lint – основной линтер для Ansible
Проверяет:
Установка:
Использовать линтеры в Ansible нужно, чтобы:
✅ обнаружить синтаксические ошибки до запуска playbook;
✅ соблюсти единый стиль кода;
✅ выявить потенциальные уязвимости;
✅ интегрировать в CI/CD для автоматической проверки перед деплоем.
Популярные линтеры для Ansible
1️⃣ ansible-lint – основной линтер для Ansible
Проверяет:
- синтаксис YAML;
- идемпотентность (например, command вместо shell, где возможно);
- использование устаревших модулей;
- рекомендации по безопасности.
Установка:
pip install ansible-lint
Запуск:
ansible-lint playbook.yml
2️⃣ yamllint – проверка YAML-синтаксиса
Ansible использует YAML, и yamllint помогает избежать:
Установка:
Ansible использует YAML, и yamllint помогает избежать:
- некорректных отступов;
- избыточных строк;
- неправильного форматирования.
Установка:
pip install yamllint
Запуск:
yamllint .
3️⃣ molecule test – тестирование ролей
Хотя Molecule — не линтер, он помогает:
Пример:
Хотя Molecule — не линтер, он помогает:
- проверять роли в изолированном окружении;
- тестировать идемпотентность;
- интегрировать линтинг в процесс разработки.
Пример:
molecule test --scenario-name default
Как интегрировать линтинг в CI/CD?
Пример для GitHub Actions:
Пример для GitHub Actions:
name: Ansible Linting
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run ansible-lint
run: pip install ansible-lint && ansible-lint
- name: Run yamllint
run: pip install yamllint && yamllint .
Лучшие практики
Пример исправления ошибки
До (проблема: модуль shell, выполняет команды напрямую без проверки состояния.)
- линтить перед каждым коммитом – можно через Git Hooks;
- использовать ansible-lint в CI – чтобы код в репозитории всегда был чистым;
- настроить IDE – плагины для VSCode (Ansible, YAML) подсвечивают ошибки на лету.
Пример исправления ошибки
До (проблема: модуль shell, выполняет команды напрямую без проверки состояния.)
- name: Restart service (unsafe)
shell: systemctl restart nginx
После (рекомендуемый вариант - модуль ansible.builtin.service, так как он обеспечивает идемпотентность и обработку ошибок):
- name: Restart service (safe)
ansible.builtin.service:
name: nginx
state: restarted
Узнать больше о линтерах и научиться работать с ними вы можете на курсе «Ansible: Infrastructure as Code». Старт 28 апреля. Все подробности по ссылке.