Как проверить сценарий установки и удаления с Molecule для Ansible? - PullRequest
3 голосов
/ 23 мая 2019

В создаваемой мной роли Ansible я описываю сценарии установки и удаления:

  • foo-install.yml вызывается из main.yml, когда флаг install установлензначение true.
  • foo-uninstall.yml вызывается с main.yml, если флаг install установлен на false.

В то время как установка охватывает установку RPMпакет, копирование файлов конфигурации и запуск системной службы. Действия по удалению сводят процесс установки к другому: остановите системную службу, удалите пакет RPM, удалите папку приложения.

Как добропорядочный гражданин, я создалпроверьте роль, используя Molecule , которая выполняет роль в окне CentOS Vagrant.Это прекрасно работает для сценария установки, где я использую тесты Python (используя testinfra) для проверки установленного RPM, запуска службы и т. Д.

Как я могу использовать Molecule для проверки сценария удалениятакже?Есть ли способ изменить шаги в Molecule, чтобы он делал что-то вроде этого (упрощенно)?

  • create
  • сходится (запускайте части установки роли)
  • идемпотентность (для части установки)
  • проверка (шаги установки)
  • сходятся (запустите части удаления роли)
  • идемпотентность (для части удаления)
  • проверить (шаги удаления)
  • уничтожить

Возможно, я что-то упускаю, но я не нашел очевидного пути (или примеров) о том, каксделайте что-нибудь подобное.

Есть ли способ охватить подобные сценарии?Или мне лучше просто протестировать сценарий установки?

1 Ответ

2 голосов
/ 23 мая 2019

Рекомендуемое решение

Рекомендованным способом решения этой проблемы является использование нескольких Molecule Scenarios . Вы можете использовать сценарий install по умолчанию, а затем добавить второй сценарий uninstall, который просто запускается и тестирует шаги удаления.

При настройке просто создайте второй каталог сценариев в папке molecule вашей роли (скопируйте default один), а затем внесите некоторые изменения:

  • В файле molecule.yml измените атрибут scenario.name на uninstall.
  • В том же файле используйте файл playbook.yml сценария default в качестве книги воспроизведения для шага prepare:

    provisioner:
      name: ansible
      playbooks:
        prepare: ../default/playbook.yml
        converge: playbook.yml
    
  • Настройте тесты для сценария uninstall, чтобы проверить шаги удаления.

Это гарантирует, что для установки программного обеспечения будут использованы те же действия, что и в сценарии установки / по умолчанию, и вы сможете сосредоточиться на этапах удаления.

Для запуска сценариев вы можете запустить либо все, либо один:

# Run all scenarios
molecule test --all

# Run only the uninstall scenario
molecule test --scenario-name uninstall

Это должно приблизить вас к тому, что вы хотите сделать, без репликации какого-либо кода.

Если вы хотите попробовать другие вещи, вот пара других мыслей:

Альтернативы

Я бы оставил сценарий только для установки, который бы воспроизводил все необходимые тесты (ворс, идемпотентность, проверка, проверка ....) и создавал бы install_uninstall определенный сценарий.

Игра install_uninstall никогда не будет идемпотентной. Таким образом, этот сценарий должен отключить тесты идемпотентности, которые никогда не пройдут. Вы также можете отключить контрольный тест, который воспроизводится в другом сценарии, lint ... Это можно сделать в molecule.yml, настроив параметры для scenario.test_sequence:

scenario:
  name: install_uninstall
  test_sequence:
    - destroy
    - create
    - prepare
    - converge
    - verify
    - destroy

Конечно, вы можете приспособиться к вашим реальным потребностям (например, сбросить проверить, если у вас нет тестовых тестов для этого случая).

После того, как это будет сделано, вам нужно добавить только две пьесы в вашу сценарий:

---
- name: install
  hosts: all
  roles:
    - role: my_role
      install: true

- name: uninstall
  hosts: all
  roles:
    - role: my_role
      install: false

И вы должны быть готовы к тестированию с:

molecule test -s install_uninstall

Редактировать : Другим вариантом может быть сохранение только текущего сценария установки, но запуск отдельных команд молекулы, а не полный тест. Предполагая, что ваш текущий рабочий сценарий находится в default

# Check and lint my files
molecule lint
# Make sure no box/container is on the way
molecule destroy
# Create my box/container for tests
molecule create
# Play my default playbook
molecule converge
# Idempotency check
molecule idempotence
# Verify we can correctly use check mode
molecule check
# Play testinfra tests
molecule verify
# Now play the uninstall
molecule converge -- -e install=false
## add more tests you can think off ##
# and finally cleanup
molecule destroy.

К сожалению, если только эта функция не была добавлена ​​в молекулу совсем недавно, невозможно вызвать idempotency и check с дополнительными переменными

...