nwi*_*ler 6 vagrant ansible molecule
在我创建的 Ansible 角色中,我涵盖了安装和卸载场景:
foo-install.ymlmain.yml当install标志设置为 时调用true。foo-uninstall.ymlmain.yml当install标志设置为 时调用false。虽然安装包括安装 RPM 包、复制配置文件和启动系统服务,但卸载步骤基本上与安装相反:停止系统服务、卸载 RPM 包、删除应用程序文件夹。
作为一个好公民,我使用Molecule创建了该角色的测试,该测试在 CentOS Vagrant 盒子中运行该角色。这对于安装场景效果很好,我使用 Python 测试(使用testinfra)来验证 RPM 是否安装、服务是否启动等。
我现在如何使用 Molecule 来测试卸载场景?有没有办法改变 Molecule 中的步骤,使其执行类似的操作(简化)?
也许我错过了一些东西,但我还没有找到关于如何做这样的事情的明显方法(或示例)。
有没有办法覆盖这样的场景?或者我最好只测试安装场景?
解决这个问题的推荐方法是使用多个分子场景。您可以使用您的install方案作为默认方案,然后添加uninstall仅运行并测试卸载步骤的第二个方案。
设置此选项时,只需在您的角色molecule文件夹中创建第二个场景目录(复制该default目录),然后进行一些更改:
scenario.name在更高版本中已删除)molecule.yml文件中将属性更改scenario.name为uninstalldefault场景的playbook.yml文件作为该步骤的剧本prepare: provisioner:
name: ansible
playbooks:
prepare: ../default/playbook.yml
converge: playbook.yml
Run Code Online (Sandbox Code Playgroud)
uninstall以验证卸载步骤。这将确保使用与安装/默认方案中相同的步骤来安装软件,并且您可以专注于卸载步骤。
要运行场景,您可以运行所有场景或单个场景:
# Run all scenarios
molecule test --all
# Run only the uninstall scenario
molecule test --scenario-name uninstall
Run Code Online (Sandbox Code Playgroud)
这应该会让您非常接近您想要做的事情,而无需复制任何代码。
如果您想尝试其他一些事情,这里有一些其他想法:
我只会保留一个安装场景,它将执行所有需要的测试(lint、幂等性、检查、验证......)并创建一个install_uninstall特定的场景。
玩install_uninstall永远不会是幂等的。因此,这种情况应该禁用永远不会通过的幂等性测试。您可能还想禁用在其他场景中进行的检查测试,lint...这可以通过molecule.yml调整以下参数来完成scenario.test_sequence:
scenario:
name: install_uninstall
test_sequence:
- destroy
- create
- prepare
- converge
- verify
- destroy
Run Code Online (Sandbox Code Playgroud)
当然,您可以根据您的实际需求进行调整(例如,如果您没有针对这种情况的 testinfra 测试,也可以删除 verify)。
完成此操作后,您只需在场景剧本中添加两个剧本:
---
- name: install
hosts: all
roles:
- role: my_role
install: true
- name: uninstall
hosts: all
roles:
- role: my_role
install: false
Run Code Online (Sandbox Code Playgroud)
您应该准备好进行测试:
molecule test -s install_uninstall
Run Code Online (Sandbox Code Playgroud)
编辑:另一种选择是仅保留当前的安装场景,但启动单个分子命令而不是完整的测试。假设您当前的工作场景是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.
Run Code Online (Sandbox Code Playgroud)
不幸的是,除非这个功能是最近添加到分子中的,否则不可能使用额外的变量来调用idempotencyandcheck