Покрывал ли Ansible-плейбуки тестами?

«Покрывал ли Ansible-плейбуки тестами?» — вопрос из категории Ansible, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, я тестирую Ansible-плейбуки. Хотя плейбуки часто более специфичны для инфраструктуры, чем роли, их тестирование не менее важно для предотвращения регрессий. Я использую комбинацию инструментов:

  • Molecule: Для прогона плейбуков в изолированном окружении и проверки ключевых сценариев.
  • Ansible-lint: Для проверки синтаксиса, использования устаревших модулей и следования соглашениям.
  • Проверка идемпотентности: Запуск плейбука дважды и убеждение, что на втором прогоне не было изменений (changed=0).

Пример теста идемпотентности в Molecule:

# Задача в converge playbook для проверки
- name: Ensure idempotence check
  block:
    - name: Run the playbook a second time for idempotence
      command: ansible-playbook site.yml
      register: second_run
      changed_when: false

    - name: Fail if changes were reported on the second run
      fail:
        msg: "Playbook is not idempotent! Changes detected on second run."
      when: second_run.stdout | regex_search('changed=[1-9]')

Для сложных плейбуков, разворачивающих целые среды (например, кластер Kubernetes), я создаю отдельные тестовые стенды и запускаю на них smoke-тесты, проверяющие доступность критических сервисов.