在我要创建的Ansible角色中,我涵盖了安装和卸载方案:
-
foo-install.yml
从main.yml
调用install
标志设置为true
。 -
foo-uninstall.yml
从main.yml
调用install
标志设置为false
。
当安装覆盖安装RPM软件包,复制配置文件并启动系统服务时,卸载步骤基本上会逆转安装:停止系统服务,卸载RPM软件包,请删除应用程序文件夹。
>作为一个好公民,我使用分子为角色进行了测试,该角色在Centos Vagrant盒中扮演角色。对于安装方案,这很好,我使用Python测试(使用testinfra
(来验证RPM已安装,启动了服务等。
现在,我如何也可以使用分子来测试卸载方案?有没有办法改变分子的步骤,它可以执行这样的操作(简化(?
- 创建
- 收敛(运行角色的安装部分(
- idempotence(对于安装部分(
- 验证(安装步骤(
- 收敛(运行角色的卸载部分(
- idempotence(对于卸载部分(
- 验证(卸载步骤(
- 销毁
也许我错过了一些东西,但是我还没有找到关于如何做这样的事情的明显方法(或示例(。
有没有办法涵盖这样的方案?或者我最好只测试安装方案?
推荐解决方案
建议解决此问题的推荐方法是使用多个分子方案。您可以将install
方案用作默认情况,然后添加仅运行并测试卸载步骤的第二个uninstall
方案。
设置此问题,只需在角色的molecule
文件夹中创建第二个方案目录(复制default
One(,然后进行一些更改:
-
( edit :分子< 3.0所需的步骤。在以后的版本中删除了
scenario.name
((molecule.yml
文件中的scenario.name
属性更改为 CC_16。 -
在同一文件中,使用
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,idempotency,check,验证....(并创建一个install_uninstall
特定方案。
玩install_uninstall
永远不会是企业。因此,这种情况应该禁用永远不会通过的势力测试。您可能还希望禁用其他方案中播放的检查测试,lint ...可以通过调整scenario.test_sequence
的参数:
molecule.yml
中完成。
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