我正在为我的应用程序设置环境。这将涉及各种CHEF配方的融合,例如软件包安装,文件夹创建,nfs挂载等。
我必须在大约5000台以上的服务器中执行这些操作,因此我希望对食谱的操作进行某种验证;
要执行的操作: 食谱应验证其操作结果并记录状态,以便以后可以将其解析并填充到状态仪表板中
将此作为创建目录的通用方法。
node['my_cookbook']['directory'].each do |directory|
directory "Applying #{directory['path']} directory configuration" do
path directory['path']
group directory['group']
owner directory['owner']
mode directory['mode']
recursive directory['recursive'] || true
action directory['action'] || :create
end
end
考虑到上述情况,应该采取什么方法?
是否可以使用某些特定的CHEF资源进行验证?
答案 0 :(得分:0)
您可以使用几种测试框架:
chefspec(单元\故意测试)
使用ChefSpec模拟节点上的资源融合:
- 是RSpec的扩展,RSpec是针对Ruby的行为驱动开发(BDD)框架
- 是测试资源和配方的最快方法 ChefSpec是一个框架,它在模拟的“厨师-客户”运行中测试资源和配方。 ChefSpec测试执行非常快。当作为食谱创作工作流程的一部分时,ChefSpec测试通常是表明食谱中可能存在问题的第一个指标。
ChefSpec在禁用所有资源操作的情况下运行您的配方代码。这意味着ChefSpec擅长测试食谱中的复杂逻辑,但实际上无法告诉您食谱是否在做正确的事情。
test-kitchen(集成和系统测试)
Test Kitchen是用于在隔离的目标平台上开发和测试基础结构代码和软件的集成工具。
inspec(系统测试)
将您的合规性,安全性和其他策略要求转换为自动化测试。
一个人可以将inspec安装集成为chef-client运行的一部分,并创建一个an handler以便在chef-client运行结束时调用inspec。作为其一部分,序列化节点对象并在inspec中反序列化它以轻松访问节点属性;)