Ansible-lint + Molecule: проверка и тест ролей
Добавлено 2026-10-29.
Проблема
Роль проходит на одном сервере и ломается на другом; повторный запуск снова что-то меняет. Ошибки находят уже на проде.
Решение
Два уровня проверки. Ansible-lint — статически, до запуска: правила по профилям от min до production. Molecule — на одноразовом тестовом хосте: применить роль, применить её повторно (idempotence должна дать changed=0), проверить результат.
Пример
Линтер в pre-commit:
repos:
- repo: https://github.com/ansible/ansible-lint
rev: v26.10.1
hooks:
- id: ansible-lint
ansible-lint --profile basic # начать с basic, поднимать уровень постепенно
Molecule — последовательность в molecule/default/molecule.yml:
scenario:
test_sequence:
- dependency
- destroy
- create
- converge
- idempotence
- verify
- destroy
molecule/default/verify.yml — проверить результат, а не только отсутствие ошибок:
- name: Verify
hosts: all
tasks:
- name: Nginx config is valid
ansible.builtin.command: nginx -t
changed_when: false
molecule test
Создание и удаление тестового контейнера описываются в create.yml и destroy.yml; в документации Molecule пример с коллекцией containers.podman.
Когда применять
Для каждой роли, которая применяется больше чем к одному серверу.
Источник
Как применить у себя
- Включить
ansible-lint --profile basicна одной роли и закрыть замечания. - Добавить Molecule-сценарий с idempotence и verify.
- Убедиться, что второй прогон даёт
changed=0. - Отметить «Изучено», когда оба шага выполняются в CI.