【问题标题】:Chef recipe not found for cookbook找不到食谱的厨师食谱
【发布时间】:2021-11-01 07:27:24
【问题描述】:

我正在尝试使用 Chef 的 PostgreSQL 食谱: https://supermarket.chef.io/cookbooks/postgresql#readme

我收到此错误:

Chef::Exceptions::RecipeNotFound: could not find recipe default for cookbook postgresql

我在 repo 中没有看到 default.rb: https://github.com/sous-chefs/postgresql/find/main

我已将依赖项添加到 Berksfile 和 metadata.rb 并在我的配方中添加:

include_recipe 'postgresql'

我还在我的仓库中添加了一个 default.rb 和 include_recipe 'postgresql'。 仍然一直说没有默认食谱。我在这里遗漏了什么吗?

编辑:

根据 seshadri_c 的回答,这是错误现在消失了。 我正在尝试安装扩展。 在我的 default.rb 中有这个:

postgresql_extension 'postgres adminpack' do 
   database 'postgres' 
   extension 'adminpack' 
end 

但报错

FATAL: NoMethodError: postgresql_extension[postgres adminpack] (******::default line 5) had an error: NoMethodError: bash[CREATE EXTENSION postgres adminpack] (/tmp/packer-chef-solo/local-mode-cache/cache/cookbooks/postgresql/resources/extension.rb line 31) had an error: NoMethodError: undefined method `[]' for nil:NilClass[0m 

【问题讨论】:

    标签: postgresql chef-infra


    【解决方案1】:

    在 postgresql 食谱 v7.0 中引入了一项重大更改。引用自超市页面:

    如果您想知道所有食谱在 v7.0+ 中的位置,或者我到底是如何使用这本新食谱的,请参阅 upgrade.md 以获取完整说明。

    简而言之,所有食谱功能都已从食谱移至 custom resources

    因此,现在重用该功能的正确方法是“调用”适当的资源,而不是“包含”配方。

    my_pg_clientcookbook 安装 PostgreSQL 客户端的示例:

    my_pg_client/metadata.rb

    depends 'postgresql' # version pin as required
    

    然后在my_pg_client/recipes/default.rb

    # Install client software
    
    postgresql_client_install 'My PostgreSQL Client install' do
      version '9.5'
    end
    

    还有其他类似的自定义资源,如果要安装服务器例如:

    postgresql_server_install 'My PostgreSQL Server install' do
      version '9.5'
      action :install
    end
    

    有很多关于如何使用custom resources 的示例:https://github.com/sous-chefs/postgresql/tree/main/test/cookbooks/test/recipes

    更新

    postgresql_extension 资源默认安装作为资源名称提供的扩展名。因此,extension 'adminpack' 属性可以省略。您可以尝试以下方法:

    # Considering that a DB called "postgres" exists
    
    postgresql_extension 'adminpack' do
      database 'postgres'
    end
    

    【讨论】:

    • 谢谢。该错误现在消失了。现在尝试安装扩展程序时出现另一个错误。不知道你是否也熟悉这个?
    • 我不太确定,但是您创建了数据库和用户吗?
    • 是的,数据库和用户已在单独的现有配方中创建。创建 default.rb 以仅使用 PostgreSQL 食谱安装扩展,但目前失败。
    • 我已经更新了答案,您可以尝试像我一样更改资源名称。不太确定它会解决问题。
    • 不幸的是,结果仍然相同。仍然得到那个未定义的方法错误。