入门指南¶
下面的指南将逐步介绍一个开发和测试新的Ansible角色的示例。阅读本指南后,您应该熟悉如何使用Molecule的基本知识以及它能提供什么。
注解
为了手动完成本指南,您需要另外安装 Docker . Molecule需要Docker驱动程序的外部Python依赖项,这是在使用安装Molecule时提供的 pip install 'molecule[docker]'
.
创建新角色¶
Molecule用途 galaxy 在引擎盖下生成常规角色布局。如果你以前曾与Ansible角色合作过,那你就在家了。如果没有,请检查 Roles 查看每个文件夹负责什么的指南。
要使用Molecule生成新角色,只需运行:
$ molecule init role my-new-role --driver-name docker
你应该看到一个 my-new-role
当前目录中的文件夹。
注解
作为将来的参考,如果您想在现有角色中初始化Molecule,您可以使用 molecule init scenario -r my-role-name
来自角色目录的命令(例如。 my-role-name/
)
Molecule场景¶
您将注意到一个新文件夹,它是 molecule
文件夹。
此文件夹中有一个 脚本 打电话 default
.
场景是Molecule提供的许多强大功能的起点。现在,我们可以将一个场景看作是新创建角色的测试套件。你可以有任意多的场景,Molecule会一个接一个地运行。
场景布局¶
内 molecule/default
文件夹中,我们找到了一些文件和目录:
$ ls
INSTALL.rst molecule.yml converge.yml verify.yml
INSTALL.rst
包含关于您需要采取哪些附加软件或设置步骤才能使Molecule成功与驱动程序接口的说明。molecule.yml
是Molecule的中心构型入口点。通过这个文件,您可以配置Molecule在测试您的角色时将使用的每个工具。converge.yml
是包含角色调用的playbook文件。Molecule会用ansible-playbook
并对驱动程序创建的实例运行它。verify.yml
是用于测试的Ansible文件,因为Ansible是默认值 验证者 . 这允许您在角色完成执行后针对容器的状态编写特定的测试。其他验证工具可用(请注意 TestInfra 是Molecule版本3之前的默认验证器。
检查 molecule.yml
¶
这个 molecule.yml
是用来配置Molecule的。它是一个 YAML 其密钥表示Molecule提供的高级组件的文件。这些是:
这个 驱动程序 供应商。Molecule用途 Docker 默认情况下。Molecule使用驱动程序来委托创建实例的任务。
这个 Lint 命令。Molecule可以调用外部命令来确保鼓励最佳实践。
这个 平台 定义。Molecule依靠它来知道要创建哪些实例、命名每个实例以及每个实例属于哪个组。如果需要针对多个流行发行版(CentOS、Fedora、Debian)测试角色,可以在本节中指定。
这个 供应者 . Molecule只提供了一个可靠的供应器。Ansible基于此配置管理实例的生命周期。
这个 脚本 定义。Molecule依靠这种结构来控制场景的顺序。
这个 验证者 框架。默认情况下,Molecule使用Ansible为目标实例提供一种编写特定状态检查测试(例如部署烟雾测试)的方法。
运行测试序列命令¶
让我们用Docker驱动程序创建第一个Molecule托管实例。
首先,确保 Docker 正在运行典型的健全性检查:
$ docker run hello-world
现在,我们可以告诉Molecule创建一个实例:
$ molecule create
我们可以验证Molecule已经创建了实例,并且它们正在运行:
$ molecule list
现在,让我们将一个任务添加到 tasks/main.yml
像这样:
- name: Molecule Hello World!
debug:
msg: Hello, World!
然后,我们可以让Molecule根据我们的实例测试我们的角色:
$ molecule converge
如果以后要手动检查实例,可以运行:
$ molecule login
我们现在可以自由地使用实例状态进行实验。
最后,我们可以退出实例并使用以下方法销毁它:
$ molecule destroy
注解
如果Molecule报告了任何错误,那么传递 --debug
选项以获取更详细的输出。
运行完整的测试序列¶
Molecule提供用于手动管理实例、场景、开发和测试工具的生命周期的命令。然而,我们也可以告诉Molecule在一个小时内自动处理这个问题 脚本 顺序。
可以通过以下方式调用整个生命周期序列:
$ molecule test
注解
通过 --destroy=never
调用时标记 molecule test
这样你就可以告诉Molecule运行完整的序列,但是如果一个步骤失败,就不能销毁实例。