找不到食谱

Cookbook apt not found

我已经尝试 运行 我的食谱好几个小时了,并且经历了多个关于相同的问题,但仍然无法让它发挥作用。

sudo chef-solo -c solo.rb -j node.json -o main::default;

我 运行 在我的 cookbooks 文件夹中执行上述命令,该文件夹包含其他食谱,如 aptgit

并且,在 cookbooks/main/recipe/default.rb 内,我包括 include_recipe "apt"

每次,我 运行 命令都会收到以下错误:

Cookbook apt not found. If you're loading apt from another cookbook, make sure you configure the dependency in your metadata

所以我在 cookbooks/main/metadata.rb 中添加了 depends "apt"。但是现在我收到了这个错误:

Cookbook depends on itself in cookbook apt, please remove this unnecessary self-dependency

所以作为一个有点无关的答案:你真正需要那个 apt::default 食谱的可能性很小。我们已将食谱中的大部分内容移至 Chef 核心。如果您只想 运行 一个 apt-get update,请使用 apt_update 资源。

没有更多信息,很难推断问题出在哪里。这是理论上应该如何布置 cookbooks/files 的示例:

您正在编写的所有食谱都在 <dir>/cookbooks/ 中。 所有出售的食谱(例如 apt)都放在 <dir>/vendor/ 中。 所以你的结构,在一个非常精简的层次上,可能看起来像这样:

.
├── cookbooks
│   └── main
│       ├── metadata.rb
│       └── recipes
├── solo.rb
└── vendor
    └── apt
        ├── metadata.rb
        └── recipes

现在让我们来看看一些单独的文件:

您的 main 食谱的默认食谱:

# cookbooks/main/recipes/default.rb

include_recipe 'apt'

还有您的 main 食谱的元数据文件:

# cookbooks/main/metadata.rb

name 'main'
...

depends 'apt'

请注意 apt 食谱位于 vendor/ 中。此处的任何内容都应来自第三方,您不应修改。

从这里开始,您只需确保 solo.rb 正确引用 cookbook_path 属性的两个食谱目录:

# solo.rb

...
cookbook_path ['cookbooks/', 'vendor/']
...

第二个答案,因为这是在 Slack 上诊断出来的,main 食谱的元数据中有 name "apt",这使得错误消息令人困惑。