如何判断berkshelf是否连接到我的厨师服务器

时间:2015-02-13 22:47:22

标签: chef knife berkshelf

我正在尝试与厨师一起使用berkshelf配置一台Vagrant机器。这是在Windows 7上运行的。我将Berkshelf安装为Chef-DK的一部分。它报告版本3.2.3。我的流浪汉配置失败了,因为它找不到一些食谱。这是我的Berksfile的相关部分

source "https://api.opscode.com/organizations/createthegood"
#source "https://api.berkshelf.com"

metadata

cookbook "drupal_site"
cookbook "al_base" 

当我运行berks install时,它无法索引源:

D:\Rob\VMs\ctg_cookbook>berks install
Resolving cookbook dependencies...
Fetching 'artifact' from git://github.com/RiotGames/artifact-cookbook.git (at master)
Fetching 'ctg_cookbook' from source at .
Fetching 'drush' from git://github.com/jenkinslaw/chef-drush.git (at 0a567e2)
Fetching 'php-fpm' from git://github.com/yevgenko/cookbook-php-fpm.git (at master)
Fetching cookbook index from https://api.opscode.com/organizations/createthegood...
D:/opscode/chefdk/embedded/lib/ruby/gems/2.0.0/gems/berkshelf-api-client-1.2.1/lib/berkshelf/api
_client/connection.rb:67:in `block in universe': undefined method `each' for #<String:0x3fdc4e8>
 (NoMethodError)
        from D:/opscode/chefdk/embedded/lib/ruby/gems/2.0.0/gems/berkshelf-api-client-1.2.1/lib/
berkshelf/api_client/connection.rb:66:in `tap'
        from D:/opscode/chefdk/embedded/lib/ruby/gems/2.0.0/gems/berkshelf-api-client-1.2.1/lib/
berkshelf/api_client/connection.rb:66:in `universe'
        from D:/opscode/chefdk/embedded/apps/berkshelf/lib/berkshelf/source.rb:22:in `build_univ
erse'
        from D:/opscode/chefdk/embedded/apps/berkshelf/lib/berkshelf/installer.rb:21:in `block (
2 levels) in build_universe'

然而,刀在其配置的服务器上找到了cookbook:

C:\Users\29007>knife cookbook list help
7-zip                  1.0.2
activelamp_composer    0.0.1
activelamp_drupal      0.0.4
activelamp_symfony     0.0.1
al_base                0.0.1

我认为也许berkshelf没有从刀上获取配置信息(也许是关键文件)。但我似乎无法想出一种方法来验证这一点。我试图诊断这个问题的下一步是什么?

1 个答案:

答案 0 :(得分:2)

我不相信Hosted Chef会提供您可以在Berksfile中使用的Berkshelf API。 Berkshelf需要与berkshelf-api交谈,https://supermarket.chef.io可以为您的所有Chef Server的烹饪书编制索引,然后能够进行依赖项解析。这就是block in universe失败的原因,因为berkshelf-api中有/universe API资源。看起来Hosted Chef并不支持它。

通常在您的Berksfile中,您首先放置内部berkshelf-api,然后将社区berkshelf-api放在第二位。在这种情况下,社区api现在位于berkshelf-api。如果您的烹饪书仅依赖于超市上的烹饪书,您将不必设置自己的Berkshelf API。

如果您计划编写依赖于您自己的烹饪书的烹饪书,最好的方法是设置cookbook服务器。有一个Hosted Chef organization,您可以将其设置并指向your own supermarket。您还可以设置{{3}},它还提供Berkshelf API。