【问题标题】:Cookbook not found : Chef Solo未找到食谱:Chef Solo
【发布时间】:2023-06-30 18:27:01
【问题描述】:

我从 Chef 社区下载了食谱“oc-java-master”,现在我尝试使用已安装在 Windows Server 2008 上的 chef-solo 运行它。

经过大量谷歌搜索和 * 支持后,我能够获取定义运行列表的 JSON 文件。但是下面的错误在过去的 4-5 个小时里一直困扰着我,我完全一无所知。

[2012-11-28T11:33:28+00:00] 致命:Chef::Exceptions::CookbookNotFound:Cookbook java 未找到。如果您从另一本食谱加载 java,请确保在元数据中配置依赖项

如果有人可以查看食谱并建议我一些解决方案,我将不胜感激。 食谱的 URL 是here

【问题讨论】:

    标签: chef-infra cookbook


    【解决方案1】:

    一些事情。

    使用 Chef Solo,您必须提前告诉它更多信息,以便它找到食谱。

    1. 它需要知道用于运行的运行列表(和节点属性,如果有的话)。这是使用-j 选项传递的“json 文件”。

    2. 它需要知道食谱的路径。您可以使用 -r 选项从远程 tarball 下载它们,然后让它处理其余部分,或者您必须编写一个带有 cookbook_path 值的配置文件并取消归档您要在该目录中使用的说明书。默认为c:\var\chef\cookbooks

    另外,Opscode Chef Community Site 与 GitHub 上的“Cookbooks”组织不同。

    Opscode's Java cookbook 在 Windows 上不起作用。您需要自己编写或找到另一个可以编写的。

    最后,Chef mailing listsIRC channels 是快速获得 Chef 帮助的最佳方式。

    【讨论】:

    • 正如@jtimberman 在 (2) 中所说的,在任何配置文件 (solo.rb) 中创建一个 cookbook_path。指定路径时要注意一件事,使用 '\\' 而不是 '\' 。例如:cookbook_path "G:\\stutzen\\chef\\chef-solo-eg\\cookbooks\\"
    【解决方案2】:

    您需要在 metadata.rb 文件中添加一行。 取决于“食谱名称” 对于你的问题 转到 oc-java-master 的元数据文件并写入

    依赖于“java”

    请验证cookbook java 是否存在于您的cookbook 路径中

    【讨论】:

      【解决方案3】:

      在我的例子中,我使用 Vagrant 和 chef_solo 提供者。似乎目标厨师节点(在我的情况下是 Vagrant 托管 VM)上的文件夹 /tmp/vagrant-chef/a0544031e745d8ec23aa205c03bf9231 是此提供程序缓存食谱的地方。由于某种原因,此文件夹为空,导致 chef_solo 找不到任何食谱。也许它是空的,因为我打断了一次执行(只是猜测)。

      我完全删除了 /tmp/vagrant-chef,然后执行“vagran reoad”,然后执行“vagrant provision”命令。这创建了 /tmp/vagrant-chef/a0544031e745d8ec23aa205c03bf9231/cookbooks 树的新副本,这一次一切正常,我不再收到“找不到食谱”

      【讨论】:

        【解决方案4】:
        1. Chef 需要一个配置文件,但会接受命令行中的选项,在 代替配置文件。
        2. 它希望配置文件驻留在 /etc/chef

        或者给你自己的solo.rb文件

        chef-solo --config ~/.chef/solo.rb --override-runlist 'recipe[your-app]'
        

        solo.rb 的内容在哪里:

        cookbook_path ENV['HOME']
        

        【讨论】:

          【解决方案5】:

          我遇到了几乎完全相同的问题,尽管我的解决方案是您在上面看到的其他问题。就我而言,我从安装 ChefDK 的盒子中手动复制了食谱。我从

          c:\users[user].berkshelf\cookbooks 目录

          到我打算运行 chef-client 的目标机器。我最初尝试运行 chef-zero 时遇到问题,所以我尝试了 chef-solo 并设置了一个带有运行列表的 .json 文件和一个 solo.rb 文件,如您在上面看到的那样通过,但仍然出现错误。

          事实证明,问题是由于每本复制的食谱都在名称中嵌入了版本。从名称中删除版本后,它会从 solo.rb 中指定的路径中找到确切的版本。

          在我的情况下,问题不是找到说明书,而是找到与依赖项中指定的名称完全相同的说明书(没有版本)。

          【讨论】: