Рекомендуемое решение
Рекомендованным способом решения этой проблемы является использование нескольких 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
с дополнительными переменными