入门指南

下面的指南将逐步介绍一个开发和测试新的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用途 galaxy 默认情况下,解析角色依赖关系。

  • 这个 驱动程序 供应商。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运行完整的序列,但是如果一个步骤失败,就不能销毁实例。