我是Chef的新手,并且一直使用
Test Kitchen来测试我的cookbook的有效性,这非常有用.现在,我正在尝试确保在最初运行Chef之前,生产节点上的特定于环境的属性是正确的.这些将在一个角色中定义.
例如,我可能会使用带有开发设置的Vagrant框进行收敛,这样可以验证菜谱.我希望能够测试生产节点的角色.我想我希望这些测试作为描述我的环境的真相来源.看看Test Kitchen的文档,这似乎超出了它的范围.
我的假设是否正确?在首次在生产节点上运行Chef以确保其具有正确设置之前,是否有更好的方法来测试食谱?
我很高兴地发现chef_zero使用“test / integration”目录作为它的主厨库.
原文链接:https://www.f2er.com/javaschema/281524.html只需创建您的角色
>测试/集成/角色
例
标准厨师食谱布局.
├── attributes │ └── default.rb ├── Berksfile ├── Berksfile.lock ├── chefignore ├── .kitchen.yml ├── Metadata.rb ├── README.md ├── recipes │ └── default.rb └── test └── integration ├── default │ └── serverspec │ ├── default_spec.rb │ └── spec_helper.rb └── roles └── demo.json
.kitchen.yml
--- driver: name: vagrant provisioner: name: chef_zero platforms: - name: ubuntu-14.04 suites: - name: default run_list: - role[demo] attributes:
笔记:
>供应商是chef_zero
>运行列表配置为使用角色
食谱/ default.rb
file "/opt/helloworld.txt" do content "#{node['demo']['greeting']}" end
属性/ default.rb
default['demo']['greeting'] = "hello world"
笔记:
>如果没有默认值,Cookbook将无法编译
测试/集成/默认/ serverspec / default_spec.rb
require 'spec_helper' describe file('/opt/helloworld.txt') do it { should be_file } its(:content) { should match /this came from my role/ } end
笔记:
测试/集成/角色/ demo.json
{ "name": "demo","default_attributes": { "demo": { "greeting": "this came from my role" } },"run_list": [ "recipe[demo]" ] }