Перейти к содержанию

Ansible-lint + Molecule: проверка и тест ролей

IaC · Ansible
Не изучено

Добавлено 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.

Когда применять

Для каждой роли, которая применяется больше чем к одному серверу.

Источник

Как применить у себя

  1. Включить ansible-lint --profile basic на одной роли и закрыть замечания.
  2. Добавить Molecule-сценарий с idempotence и verify.
  3. Убедиться, что второй прогон даёт changed=0.
  4. Отметить «Изучено», когда оба шага выполняются в CI.