📜  Chef-测试食谱

📅  最后修改于: 2020-11-02 03:22:04             🧑  作者: Mango


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

以下是测试步骤。

步骤1-使用以下命令安装食谱。

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

步骤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: 

工作方式

刀具食谱测试对食谱中的所有Ruby文件以及所有ERB模板执行Ruby语法检查。它循环遍历Ruby文件并针对每个文件运行Ruby –c 。 Ruby –c检查脚本的语法,然后退出而不运行它。

遍历所有Ruby文件之后,刀具食谱测试将遍历所有ERB模板和管道,这是由-x通过Ruby -c创建的冗余版本。

局限性

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