厨师规范的入门方式
最初,
首先,
起初,
厨师的测试有很多选项,比如serverspec – Home、test-kitchen/test-kitchen和Cucumber-chef等等。不过,这些选项都是为了实际运行虚拟机并对其执行食谱以进行测试(可能如此)。
如果你想测试节点值的变化是否能正确更改配置文件的值,以及not_if条件是否按预期工作,或者测试Chef食谱的逻辑,我认为ChefSpec执行速度快且适合这样做。
厨师规格的安装
在Gemfile中添加以下内容:
由于ChefSpec 3.0起,通过knife cookbook命令创建spec模板的功能已经成为独立的gem,因此需要添加knife-spec。(详细信息)
source "https://rubygems.org"
gem "chefspec"
gem "knife-spec"
安装
$ bundle install
在.rspec中添加默认设置。
--colour
--format documentation
创建草图
当您使用knife-spec插件时,执行knife cookbook create命令将创建测试代码的模板。(ChefSpec 2.x中的knife cookbook create_specs已删除。)
$ bundle exec knife cookbook create nginx -o site-cookbooks/
** Creating cookbook nginx
** Creating README for cookbook: nginx
** Creating CHANGELOG for cookbook: nginx
** Creating metadata for cookbook: nginx
** Creating specs for cookbook: nginx
撰写食谱和测试代码
由于以下有大量示例可供参考,您可以根据这些编写测试代码。
https://github.com/sethvargo/chefspec/tree/master/examples
譬如,假设有一个可变的nginx端口号的配方,并且需要测试传递的端口号是否正确,那就是这个样子。
require_relative '../spec_helper'
describe 'nginx::default' do
let(:chef_run) do
ChefSpec::Runner.new do |node|
node.set["nginx"]["port"] = "8080"
end.converge(described_recipe)
end
it "creates /etc/nginx/sites-available/default" do
expect(chef_run).to create_template("/etc/nginx/sites-available/default")
end
it "changes port to 8080 in /etc/nginx/sites-availabel/default" do
expect(chef_run).to render_file("/etc/nginx/sites-available/default").with_content(/[\s]+listen[\s]+8080;/)
end
end
食谱
# nginxのインストール
package "nginx" do
action :install
end
# /etc/nginx/sites-available/defaultの配置
template "/etc/nginx/sites-available/default" do
source "nginx/default.erb"
mode 00644
end
给出这样的节点文件的图像。
{
"run_list":[
"nginx"
],
"nginx":{
"port":"8080"
}
}
“/etc/nginx/sites-available/default” 由您自行设想。
执行
所有都执行
$ bundle exec rspec site-cookbooks/nginx/spec/
nginx::default
creates /etc/nginx/sites-available/default
changes port to 8080 in /etc/nginx/sites-availabel/default
Finished in 0.02586 seconds
2 examples, 0 failures
只执行 default_spec.rb 文件的第10行。
仅执行 default_spec.rb 文件的第10行。
$ bundle exec rspec site-cookbooks/nginx/spec/recipes/default_spec.rb:10
nginx::default
creates /etc/nginx/sites-available/default
Finished in 0.00448 seconds
1 example, 0 failures