如何让Berkshelf使用本地路径作为默认站点,或者取消设置默认站点?

时间:2013-10-25 14:56:49

标签: ruby chef berkshelf

我有一个包含许多cookbook的Chef存储库,以及一个包含以下内容的Berksfile:

Dir.glob('cookbooks/*/').each do |path|
    cookbook File.basename(path), :path => path
end

cookbook 'supervisor', '~> 0.5.1', :github => "opscode-cookbooks/supervisor"

这包括来自存储库的每本食谱,以及来自github存储库的外部食谱。默认情况下,Berkshelf在opscode社区站点中搜索未列出的任何烹饪书。

而不是这个,我要么:

  • 禁用此默认设置,从不搜索外部网站以查找缺少的依赖项。
  • 将此默认值替换为本地路径,以便我可以删除添加每本本地食谱的Dir.glob

作为旁注,我完全清楚将烹饪书保存在厨师库中被视为反模式。在这种情况下,这不是我可以改变的东西,虽然Berkshelf不是为处理这个问题而设计的,但是能够关闭默认站点以便不会从用户无法控制的源中隐式提取烹饪书仍然有用。

1 个答案:

答案 0 :(得分:2)

Berkshelf似乎使用opscode社区网站作为其默认位置,因此您可以尝试设置虚拟网站值。想法是缺少依赖会导致超时错误。

在我看来,更好的方法是使用专门的托管厨师组织或开源厨师服务器来运营您自己的食谱库:

chef_api "https://api.opscode.com/organizations/myrepo", node_name: "repo", client_key: "/path/to/repo.pem"

cookbook 'myapp'
cookbook 'supervisor', '~> 0.5.1', :github => "opscode-cookbooks/supervisor"

" myapp"的依赖关系cookbook不需要明确列出,而是从您的自定义仓库下载为传递依赖。