【问题标题】:Cookbook apt not found未找到食谱
【发布时间】:2018-03-20 15:54:22
【问题描述】:

我一直在尝试运行我的食谱好几个小时,并就相同的问题回答了多个问题,但仍然无法让它发挥作用。

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

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

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

每次运行命令都会出现以下错误:

找不到食谱。如果您从另一本食谱加载 apt, 确保在元数据中配置依赖项

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

Cookbook 依赖于 cookbook apt 中的自身,请删除它 不必要的自我依赖

【问题讨论】:

  • 基于Chef's source,看起来您可能在apt 食谱本身中添加了depends "apt" 行。您能否在每个 metadata.rb 文件中包含 depends 指令调用?
  • @vase 我在 cookbooks/main/metadata.rb 文件中包含依赖“apt”,而 apt cookbook 有不同的文件夹。

标签: ruby vagrant chef-infra chef-recipe chef-solo


【解决方案1】:

因此,作为一个有点不相关的答案:您实际上需要apt::default 配方的可能性非常小。我们已将食谱中的大部分内容移至 Chef 核心。如果您只想运行 apt-get update,请使用 apt_update 资源。

【讨论】:

    【解决方案2】:

    如果没有更多信息,就很难推断出问题所在。不过,这里有一个示例,说明理论上应该如何布置食谱/文件:

    你正在写的所有食谱都放在<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/']
    ...
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-26
        • 2015-02-25
        • 1970-01-01
        • 1970-01-01
        • 2021-11-01
        • 2015-01-14
        • 2019-12-05
        相关资源
        最近更新 更多