推荐解决方案
解决此问题的推荐方法是使用多个Molecule Scenarios。您可以将您的install
方案用作默认方案,然后添加第二个uninstall
方案,该方案仅运行并测试卸载步骤。
设置时,只需在您的角色molecule
文件夹中创建第二个场景目录(复制default
一个),然后进行一些更改:
(编辑:此步骤对于分子 < 3.0 是必需的。scenario.name
在以后的版本中已删除)在molecule.yml
文件中将scenario.name
属性更改为uninstall
.
在同一个文件中,使用default
场景的playbook.yml
文件作为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
这应该让您非常接近您想要做的事情,而无需复制任何代码。
如果你想尝试一些其他的东西,这里有一些其他的想法:
备择方案
我会为安装保留一个场景,它会播放所有需要的测试(lint、幂等性、检查、验证......)并创建一个install_uninstall
特定的场景。
玩install_uninstall
永远不会是幂等的。所以这个场景应该禁用永远不会通过的幂等性测试。您可能还想禁用在其他场景中播放的检查测试,lint... 这可以molecule.yml
通过调整以下参数来完成scenario.test_sequence
:
scenario:
name: install_uninstall
test_sequence:
- destroy
- create
- prepare
- converge
- verify
- destroy
当然,您可以根据自己的实际需求进行调整(如果您没有针对这种情况的 testinfra 测试,也可以放弃验证)。
完成此操作后,您只需在场景剧本中添加两个剧本:
---
- 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