厨师规范的入门方式

最初,
首先,
起初,

厨师的测试有很多选项,比如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
广告
将在 10 秒后关闭
bannerAds