厨师厨房缺少食谱

Missing Cookbooks with chef kitchen

正在尝试使用 Chef 设置 rails 应用程序,但出现缺少食谱错误。

重现步骤

$ chef generate app chef_rails #create new app that will hold cookbooks for rails.
$ echo "cookbook 'ruby-ng'" >> cookbooks/chef_rails/Berksfile
$ cd cookbooks/chef_rails/
$ berks install
$ berks vendor
$ cd ../../
$ vim .kitchen.yml #add `recipe[ruby-ng::default]` to runlist
$ kitchen converge

这给出了以下错误:

Missing Cookbooks: ------------------ No such cookbook: ruby-ng

   Expanded Run List:
   ------------------
   * chef_rails::default
   * ruby-ng::default

为此,我在 Whosebug 上搜索了现有的答案,并认为如果我移动出售的食谱,厨师就能找到它们

$ mv cookbooks/chef_rails/berks-cookbooks/* cookbooks
$ ls cookbooks                                                                                        
apt             chef_rails      mingw           ruby-ng         windows
build-essential compat_resource ohai            seven_zip
$ kitchen converge #works flawlessly
$ kitchen list                                                                                       
Instance             Driver   Provisioner  Verifier  Transport  Last Action  Last Error
default-ubuntu-1404  Vagrant  ChefZero     Inspec    Ssh        Converged    <None>

以下是我使用的版本:

$ chef --version                                                                                      
Chef Development Kit Version: 1.1.16
chef-client version: 12.17.44
delivery version: master (83358fb62c0f711c70ad5a81030a6cae4017f103)
berks version: 5.2.0
kitchen version: 1.14.2

问题

  1. 我可以修复错误,但我不明白 "why" 这个错误 occurred.I 认为这与 chef_repo_path 有关,但并不真正理解。那么是否可以解释或指向相关文档?
  2. 我应该将食谱卖给 ./cookbooks 而不是 ./cookbooks/chef_rails/berks-cookbooks/。如果是,那么我如何让 berks vendor 做到这一点?
  3. 开发完成后,待上传至github。还应该在 repo 中包括出售的食谱吗?计划将这些食谱与 Chef Server 一起使用来为 rails 设置服务器。

.kitchen.yml 文件应该放在 cookbook 目录中。

所以有几个问题:首先正如@StephenKing 所说,您需要 .kitchen.yml 紧挨着 Berksfile 然后您还需要 运行 kitchen 来自该文件夹的命令。其次,您不需要(或不想)使用 berks vendor,因为 Test Kitchen 有自己的 Berkshelf 支持,当您在正确的位置有 Berksfile 时,它​​会自动激活。