如何使用分子测试安装和卸载方案



在我要创建的Ansible角色中,我涵盖了安装和卸载方案:

  • foo-install.ymlmain.yml调用install标志设置为true
  • foo-uninstall.ymlmain.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.

不幸的是,除非最近将此功能添加到分子中,否则不可能致电具有额外变量的idempotencycheck

最新更新