分子-测试角色

大家好 在Habré上不止一次提到Ansible,但我没有找到有关使用该分子测试他的角色的文章,但是我发现此框架极为方便,并希望与Habr的观众分享。
但是首先,我要讲一些以前使用的内容。

以前,为了测试我创建的烦人角色,我使用了无业游民,使工作变得简单:

$ vagrant init debian/jessie64 $ vagrant up 

创建虚拟机,然后编写清单和剧本以启动角色,直到有一天我才知道该分子。

分子可以提供什么?


  1. 初始角色初始化
  2. 驱动程序/提供程序
  3. 幂等检验
  4. 验证码

初始角色初始化


如果指定了新角色,则为该角色创建示例结构

驱动程序/提供程序


Molecule允许我们使用Vagrant将Docker容器或虚拟机用作豚鼠,这是通过在初始化过程中或在Molecular.yml中指示驱动程序来确定的。 因为 如果我必须测试协调容器的角色,那么Vagrant仍然是我的首选驱动程序。 选择Vagrant作为驱动程序还可以选择提供程序。

提供以下内容:

  • Libvirt
  • 平行线
  • VirtualBox(默认)
  • VMware融合

接下来,我们将考虑使用VirtualBox作为提供者的Vagrant的变体。

幂等检验


根据Wiki:
再次将操作应用于对象时,对象或操作的属性将获得与单个对象相同的结果。

关于角色,重新启动角色后,不应进行任何更改。

验证码


为了确保角色正常工作,仅使所有任务都失败是不够的。 毕竟,您需要检查服务是否已启动,端口是否打开等。

以下框架可用于验证:

  • 高斯
  • 服务器规格
  • Testinfra(默认)

我已经通过Goss和Testinfra的测试。 对于我自己,我选择了Testinfra。

用法示例:

 $ molecule init --role sample-role 

执行此命令后,我们将获得一个带有典型ansible角色结构和必要的yaml文件的sample-role目录:

 defaults handlers meta molecule.yml // -  molecule playbook.yml //      README.md tasks tests //    vars 

您无需指定--role开关即可开始操作,在这种情况下,molecular.yml和playbook.yml文件将在当前目录中创建。

在这种情况下,您需要确保该角色在多个发行版上都起作用,在molecyle.yml中,您应该指定流浪者盒子名称(在平台中):

 vagrant: platforms: - name: jessie64 box: debian/jessie64 - name: centos7 box: centos/7 

接下来,添加必要的操作/变量等。 角色,然后我们在所有特定平台上进行测试:

 $ molecule test --platform all 

在此分子之后:

  • 如果已经创建了虚拟机,它将停止并删除它们
  • 将引发必要的虚拟机
  • 用ansible-lint测试我们的角色
  • 在新创建的容器中发挥作用
  • 将测试幂等
  • 运行testinfra测试
  • 将删除创建的虚拟机

在运行测试时,您可能需要更改分子的行为,例如,不要测试幂等性,为此,请将以下内容添加到Molecular.yml中:

 molecule: test: sequence: - destroy - syntax - create - converge - verify - destroy 

您还可以使用适当的命令分别调用每个相应的步骤,例如:

 $ molecule create --platform all $ molecule syntax $ molecule create $ molecule converge $ molecule verify 

作为一种选择,请勿在每次聚合之前删除/创建新的虚拟机。

您可以指定一个特定的平台并单独对其进行测试:

 $ molecule create --platform jessie64 $ molecule syntax $ molecule create $ molecule converge $ molecule verify 

感谢您的关注!

Source: https://habr.com/ru/post/zh-CN437216/


All Articles