首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用chefspec测试幂等性

如何用chefspec测试幂等性
EN

Stack Overflow用户
提问于 2015-05-01 11:15:04
回答 3查看 863关注 0票数 1

我想使用头孢like测试我的食谱的幂性。

假设我有一个包含这两个资源语句的菜谱:

代码语言:javascript
复制
file '/etc/app.config' do
  action :create
  notifies :restart, "service[app]"
end

service 'app' do
  action :enable
end

我如何编写一个chefspec示例来证明,如果文件/etc/app.config已经存在,那么app服务将通知而不是重新启动?

我是否可以这样做:“文件”资源认为文件已经存在了吗?我是否可以运行ChefSpec::ServerRunner两次,使状态从第一次运行(我认为不会,因为文件不会被真正创建)?或者我会被迫使用测试厨房和瓦格兰特来实现现实?

(注意:我的实际食谱有一个自定义LWRP,用于构建配置文件。它从厨师服务器获取信息,这就是我使用ServerRunner的原因)

EN

回答 3

Stack Overflow用户

发布于 2017-09-29 08:39:09

test-kitchen,因为1.18.0版本对chef_*提供程序的幂等性检查提供了工作支持(它是早些时候引入的,但比坏版要早,而且只在最新版本中修复)。它没有文档化,但您可以找到一些细节这里

基本上,您可以做的是将这两行添加到provisioner定义中:

代码语言:javascript
复制
  provisioner:
    name: chef_zero
    ...
    enforce_idempotency: true # force idempotence check
    multiple_converge: 2 # how many times to run your provisioners
    ...

这将多次运行您的食谱,并检查最后一次运行是否有0更新的资源。它还为您提供了在第二次运行时更新的资源列表。

票数 1
EN

Stack Overflow用户

发布于 2015-05-04 08:20:39

警告这是未经测试的。

我假设您可以模拟::File.exist?,以便在您的规范中为这个文件返回true。

代码语言:javascript
复制
allow_any_instance_of(File).to receive('exists?').with('/etc/app.config').and_return(true)

根据文件提供程序,这是在提供程序中调用的获取当前状态的方法。

对于像您在问题中描述的文件资源,这将非常有效。

但是,如果操作是:create,并且资源是用checksum属性或content属性定义的,则必须设法模拟文件的内容或校验和,如下所示

代码语言:javascript
复制
allow_any_instance_of(Chef::Digester).to receive('generate_checksum').with('/etc/app.config').and_return('The checksum of the file, do a sha256sum on your file to get this')

在此之后,您将不得不遵循关于通知的ChefSpec文档,这里

代码语言:javascript
复制
resource = chef_run.file('/etc/app.config')
expect(resource).to_not notify('service[app]').to(:restart)

据我所知,test的目标是测试一次运行,以确保食谱是正确的,在同一个测试中运行的倍数厨师没有被处理,最终您不得不决定您希望使用什么来进行多次运行测试。

大厨邮件列表中有关于基础设施测试的讨论,请参阅标记wiki获取到ML的链接(对话不是最终的答案,也不适合于此)。

票数 0
EN

Stack Overflow用户

发布于 2015-05-05 10:27:06

看起来,不同的启动条件只能通过实际的收敛来进行实际测试。如果是这样的话,我的问题的正确答案是使用类似于测试厨房和Vagrant之类的方法,而不是使用ChefSpec。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29985855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档