大家好 在Habré上不止一次提到Ansible,但我没有找到有关使用该分子测试他的角色的文章,但是我发现此框架极为方便,并希望与Habr的观众分享。
但是首先,我要讲一些以前使用的内容。
以前,为了测试我创建的烦人角色,我使用了无业游民,使工作变得简单:
$ vagrant init debian/jessie64 $ vagrant up
创建虚拟机,然后编写清单和剧本以启动角色,直到有一天我才知道该分子。
分子可以提供什么?
- 初始角色初始化
- 驱动程序/提供程序
- 幂等检验
- 验证码
初始角色初始化
如果指定了新角色,则为该角色创建示例结构
驱动程序/提供程序
Molecule允许我们使用Vagrant将Docker容器或虚拟机用作豚鼠,这是通过在初始化过程中或在Molecular.yml中指示驱动程序来确定的。 因为 如果我必须测试协调容器的角色,那么Vagrant仍然是我的首选驱动程序。 选择Vagrant作为驱动程序还可以选择提供程序。
提供以下内容:
- Libvirt
- 平行线
- VirtualBox(默认)
- VMware融合
接下来,我们将考虑使用VirtualBox作为提供者的Vagrant的变体。
幂等检验
根据Wiki:
再次将操作应用于对象时,对象或操作的属性将获得与单个对象相同的结果。
关于角色,重新启动角色后,不应进行任何更改。
验证码
为了确保角色正常工作,仅使所有任务都失败是不够的。 毕竟,您需要检查服务是否已启动,端口是否打开等。
以下框架可用于验证:
我已经通过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
感谢您的关注!