首页 » 运维 » 正文

molecule简介

因为工作中要用到molecule作为ansible role的测试工具,之前没有使用过,正好整理一下相关的资料

首先,什么是molecule? molecule是一个专为ansible role 编写及测试的一个便捷工具

,它可以帮我们生成必要的代码,必要的文件

安装:以mac为例:

molecule底层还是调用的ansible Galaxy来帮我们生产代码,我们看一下生成一个role的基本框架的代码:

然后我们看一下molecule为我们生成了哪些文件

除了最基本的tasks,vars,handlers,defaults等文件夹(貌似没办我们生成files文件夹,我现在开始不怎么相信这个框架了,虽然我本来就知道这个工具的缺点,没想到连基本的文件夹都能漏掉),还额外帮我们生成了一个文件夹叫molecule,并切里边有很多文件,Dockerfile.j2,molecule.yml等,我们看一下最主要的文件:

molecule.yml

dependency: 默认情况下molecule 用的是ansible galaxy 来解决role之间的依赖问题

driver:默认情况下molecule使用的是docker来作为测试的平台(就是我们会把host 设定为一个container然后执行我们的playbook然后测试效果),molecule也支持其他的例如ec2,gce,linode,azure(其实底层都是ansible的module)

platforms:这个地方我们指定我们需要测试的具体版本,此处可以指定多个版本,多个系统

provisioner:不可修改,仅仅支持ansible

verifier:molecule使用testinfa来做所有的特殊状态的测试

例子

在执行命令以前,我们需要确保我们本地机器上的docker是运行状态的

然后我们就可以开始我们的命令了!

首先,我们创建一个docker container来作为我们的的测试环境,注意执行命令所在路径必须是role的根目录(pip install molecule 如果错误提示molecule 模块找不到的话seems to be invalid: No module named ‘molecule’)

(pip install docker 如果报错:ERROR: Missing Docker driver dependency)

这一步的操作就是按照上边配置的文件创建一个container,我们可以通过两种方式查看

我们来添加一个简单的命令到我们的role中,在文件 task/main.yml

然后我们可以通过命令来测试刚刚我们创建的只有一个task的role

这样我们就完成了一个最基本的语法检查之类的测试例子

清理

以上内容均为简单的例子,实际情况中我们需要编写的内容远不止这些,如果我们创建了一个文件,我们要判断文件是否正常创建了,内容是否正常等等

 

Zhiming Zhang

Senior devops at Appannie
一个奔跑在运维路上的胖子
Zhiming Zhang

发表评论