mta*_*tak 5 ruby rspec chef-infra chefspec
我已经建立了一个用于安装Jenkins CI的食谱.它使用了食谱中的资源key
和repository
资源yum
,所以我最终得到了以下食谱:
yum_key "RPM-GPG-KEY-jenkins" do
url "http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key"
action :add
end
yum_repository "jenkins" do
description "Jenkins-CI 3rd party repository"
url "http://pkg.jenkins-ci.org/redhat"
key "RPM-GPG-KEY-jenkins"
action :add
end
Run Code Online (Sandbox Code Playgroud)
当我将这个食谱包含在另一个食谱中:
include_recipe 'sp_jenkins::default'
Run Code Online (Sandbox Code Playgroud)
我用以下的ChefSpec测试来测试它
it 'includes the `sp_jenkins::default` recipe' do
expect(chef_run).to include_recipe('sp_jenkins::install')
end
Run Code Online (Sandbox Code Playgroud)
我的ChefSpec测试失败,输出如下:
NameError:
Cannot find a resource for yum_key on chefspec version 0.6.1
Run Code Online (Sandbox Code Playgroud)
(我不确定为什么它说版本0.6.1,gem list
告诉我它使用的是3.0.2)
该sp_jenkins
食谱确实取决于yum
食谱(metadata.rb),并运行正常,但是,我目前正在写不依赖于菜谱yum
食谱,因此不具备yum_key
和yum_repository
方法可用.
有没有办法阻止ChefSpec"降序"到包含的食谱/烹饪书中,只测试当前的食谱?
哎呀!Julian 是正确的 - ChefSpec 实际上在本地计算机的内存中运行Chef Solo 。它将提供者操作重写为 noop,但创建了所有所采取操作的注册表(包括执行通知时将采取的操作)。
因此,就像您需要yum
说明书将这个菜谱聚合到真实节点上一样,您也需要它在使用 ChefSpec 进行单元测试期间聚合。实现此目的的最简单方法是使用 Berkshelf 或 Librarian 解析器。要使用Berkshelf 解析器,只需require 'chefspec/berkshelf'
在要求之后chefspec
:
# spec_helper.rb
require 'chefspec'
require 'chefspec/berkshelf'
Run Code Online (Sandbox Code Playgroud)
如果您的系统上安装了 Berkshelf,它会将所有说明书放入临时目录并为您运行 ChefSpec。
您可能还想看看Strainer,它旨在解决类似的问题。
顺便说一句,我正在对Jenkins 食谱进行相当大的重构,这可能会更适合您的需求。
资料来源:
归档时间: |
|
查看次数: |
2581 次 |
最近记录: |