厨师 - 测试食谱


如果食谱直接部署并在生产服务器上运行,则食谱在生产中很有可能崩溃。防止这种情况发生的最佳方法是在设置环境中测试说明书。

以下是测试步骤。

步骤 1 - 使用以下命令安装说明书。

vipin@laptop:~/chef-repo $ knife cookbook site install <cookbook name> 

步骤 2 - 在工作菜谱上运行刀菜谱测试命令。

vipin@laptop:~/chef-repo $ knife cookbook test VTest  
checking ntp 
Running syntax check on ntp 
Validating ruby files 
Validating templates

步骤 3 - 破坏食谱中的某些内容并再次测试。

vipin@laptop:~/chef-repo $ subl cookbooks/VTest/recipes/default.rb 
... 
[ node['ntp']['varlibdir'] 
node['ntp']['statsdir'] ].each do |ntpdir| 
   directory ntpdir do 
      owner node['ntp']['var_owner'] 
      group node['ntp']['var_group'] 
      mode 0755 
   end 
end

步骤 4 - 再次运行刀测试命令。

vipin@laptop:~/chef-repo $ knife cookbook test ntp 
checking ntp 
Running syntax check on ntp 
Validating ruby files 
FATAL: Cookbook file recipes/default.rb has a ruby syntax error: 
FATAL: cookbooks/ntp/recipes/default.rb:25: syntax error, 
unexpected tIDENTIFIER, expecting ']' 
FATAL: node['ntp']['statsdir'] ].each do |ntpdir| 
FATAL: ^ 
FATAL: cookbooks/ntp/recipes/default.rb:25: syntax error, 
unexpected ']', expecting $end 
FATAL: node['ntp']['statsdir'] ].each do |ntpdir| 
FATAL: 

工作方式

Knife 说明书测试对说明书中的所有 Ruby 文件以及所有 ERB 模板执行 Ruby 语法检查。它循环遍历 Ruby 文件并对每个文件运行 Ruby –c 。Ruby –c检查脚本的语法并退出而不运行它。

在检查完所有 Ruby 文件后,knife Cookbook 测试将检查所有 ERB 模板和管道,即由–x到 Ruby –c创建的冗余版本。

局限性

Knife Cookbook 测试仅对 Ruby 文件和 ERB 模板进行简单的语法检查。我们可以使用 ChefSpec 和测试厨房进行全面测试。