【问题标题】:How can I tell if berkshelf is connecting to my chef server如何判断 berkshelf 是否连接到我的厨师服务器
【发布时间】:2015-04-15 02:41:03
【问题描述】:

我正在尝试使用 berkshelf with chef 来配置 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 安装时,它无法索引源:

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'

但是,knife 在其配置的服务器上找到了该说明书:

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 没有从刀获取配置信息(也许像密钥文件)。但我似乎无法想出一种方法来验证这一点。尝试诊断此问题的下一步是什么?

【问题讨论】:

    标签: chef-infra knife berkshelf


    【解决方案1】:

    我不相信 Hosted Chef 提供了可以在 Berksfile 中使用的 Berkshelf API。 Berkshelf 需要与berkshelf-api 交谈,它会索引您所有 Chef Server 的食谱,然后能够进行依赖关系解析。这就是block in universe 失败的原因,因为berkshelf-api 中有/universe API 资源。 Hosted Chef 似乎不支持它。

    通常在您的 Berksfile 中,您将内部 berkshelf-api 放在第一位,然后将社区 berkshelf-api 放在第二位。在这种情况下,社区 api 现在位于 https://supermarket.chef.io。如果您的食谱仅依赖于超市提供的食谱,则您无需设置自己的 Berkshelf API。

    如果您确实计划编写依赖于您自己的食谱的食谱,最好的方法是设置一个berkshelf-api 服务器。有一个cookbook,您可以设置它并将其指向您的Hosted Chef organization。您还可以设置your own supermarket,它还提供了一个 Berkshelf API。

    【讨论】:

    • 有趣。对于我所拥有的特定环境,这似乎是一种痛苦。是否可以用刀将食谱预先下载到我的书架上?或者我应该看看将这些特定的食谱放在 git repo 中并通过 URL 引用它们?
    • 是的,很遗憾,berkshelf-api 尚未集成到厨师服务器中。我认为鉴于 Chef DK 与 Berkshelf 一起发布,我希望 Chef 能够对其进行标准化(还有其他像 Librarian Chef 这样的)。我认为 Git 方法效果最好。如果您拥有的食谱是开源的,您也可以将它们上传到supermarket。也可以运行your own supermarket
    • 我已经更新了我的答案,基本上如果你只依赖超市提供的食谱,你不需要设置任何东西。
    • 我最终做的是使用刀将它们下载到本地目录并硬编码 Berksfile 中的路径。我现在遇到了一个不同的问题,这使我无法一路成功。一旦我把它敲掉并确定我有一条前进的道路,我会回来接受你的回答。实际上,我认为我最终要做的是将这些说明书下载到项目的源代码库中,并更新 Berksfile 以引用项目中的路径。紧密耦合,但至少它会始终提供。
    • @rhuffstedtler 是您在超市中依赖的食谱,还是您自己的食谱?
    猜你喜欢
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    相关资源
    最近更新 更多