使用非社区烹饪书与berkshelf的问题

时间:2013-12-09 19:38:58

标签: chef berkshelf

我正在尝试创建一个将使用一些很好的默认选项安装nginx + php-fpm的食谱,然后我的应用程序烹饪书可以使用它。

但Opscode PHP食谱似乎不支持php-fpm但是我注意到这个:https://github.com/priestjim/chef-php我检查了一个名为“chef-php”的食谱文件夹

在我的nginx + php cookbook的Berksfile中,我添加了:

cookbook 'chef-php', path: "../chef-php"

site :opscode

metadata 

如果我在该食谱中运行berks install,我会看到

 Using chef-php (1.2.0) at '../chef-php'

包含在输出中,表明一切正常。

因此,如果我转到我的应用程序cookbook,其中包含以下Berksfile:

cookbook 'pogo-nginx-php', path: "../pogo-nginx-php"

site :opscode

metadata 

并运行berks install我收到以下错误:

Cookbook 'chef-php' not found in any of the default locations

我已经读过,在解析依赖项的依赖关系时,Berkshelf使用metadata.rb而不是Berksfile,如果这是真的,那么解决这类问题的正确方法是什么?或者我刚刚犯了一些愚蠢的错误(完全可能!)

感谢。

2 个答案:

答案 0 :(得分:3)

以下Berksfile:

site :opscode

cookbook "chef-php", github: "priestjim/chef-php"

下载以下食谱:

$ berks install
Installing chef-php (1.2.0) from git: 'git://github.com/priestjim/chef-php.git' with branch: 'master' at ref: '19a5474e14ae2d9d05fc670aeb0cf122c3859acb'
Installing build-essential (1.4.2) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
Installing xml (1.2.0) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
Installing yumrepo (2.0.0) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
Installing yum (2.4.4) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'

答案 1 :(得分:3)

Berkshelf目前不支持嵌套的Berks文件。

我认为你是正确的,metadata.rb文件用于解决 cookbook的依赖关系。这意味着您将无法指定源,因为metadata.rb不包含超出cookbook名称和版本约束的任何内容

Berkshelf存储库中的pull请求中有一个有趣的discussion关于避免嵌套Berks文件的原因(如何解决与其他问题相关的烹饪书的冲突路径)。

我正在以类似于你的方式使用Chef并遇到同样的问题。我正在使用的解决方法是拥有一个“应用程序”Berksfile。此文件包含整个应用程序的所有依赖项。在此文件上调用berks upload会将所有依赖项上载到Chef服务器。

拉取请求讨论中提出的解决方法是在Berksfile中chef_api :config之前使用site :opscode。在查看opscode社区站点以获取配方之前,这将查看您的私有Chef服务器。 Onc的影响是,您需要在尝试上传需要它的食谱之前上传您的自定义食谱。