【问题标题】:How to use hand-written cookbooks when using berkshelf in chef?在 Chef 中使用 berkshelf 时如何使用手写食谱?
【发布时间】:2015-12-11 06:11:41
【问题描述】:

我正在使用 vagrant+chef。我的厨师食谱效果很好。然后我安装了 vagrant-berkshelf 插件,从那一刻起我就不能使用自己的食谱了。 Berkshelf 覆盖了食谱目录,当我使用它们时,厨师看不到我的食谱。我的配置是这样的:

config.berkshelf.enabled = true

config.vm.provision :chef_solo do |chef|
   chef.add_recipe "qbaka-frontend"
end

使用此配置,厨师仅适用于 Berksfile 中指定的食谱,但在 cookbooks 目录中看不到我的食谱。

如何同时使用我和 Berkshelf 的食谱?

【问题讨论】:

    标签: chef-infra vagrant berkshelf


    【解决方案1】:

    vagrant-berkshelf 插件和 Berkshelf 通常以食谱为中心。然而,Chef 是以食谱回购为中心的。安装 vagrant-berkshelf 插件会鼓励您使用以说明书为中心的方法,将每本说明书视为自己的软件项目。

    您需要将cookbooks 目录中的每个说明书添加到您的 Berksfile。这里有两种方法:

    1. 如果您只需要一两本食谱,只需使用Berkshelf path location 添加它们:

      cookbook 'bacon', path: '~/cookbooks/bacon'
      
    2. 如果您想要所有您的食谱,您可以在此处使用 Ruby。一个鲜为人知的秘密是Berksfile 是作为 Ruby 执行的,所以你可以循环并变得神奇:

      Dir['/Users/sethvargo/cookbooks/**'].each do |path|
        cookbook File.basename(path), path: path
      end
      

      这会将该目录中的每本食谱加载到您的 Berksfile(以及 Berkshelf)中

    来源:

    • 我是 Berkshelf 项目的核心提交者
    • 发这篇文章时我在 Chef 工作 :)

    【讨论】:

    • 感谢您的回答和此工具:)。但为什么会这样呢?我希望这类工具完全透明,就像在 Maven 中所做的那样。
    • @Daniil 我不是 100% 确定你在问什么。为什么以 Berkshelf 食谱为中心?
    • 这样不是更好吗?我还使用方括号Dir.glob('custom_cookbooks/**').each do |path| cookbook File.basename(path), path: path end 遇到了全局错误
    • 来自 Berkshelf.com:“使用 Vagrant Berkshelf 插件时,Chef Solo 供应商的 cookbook_path 属性被劫持。从您的 Berksfile 解析的食谱将自动提供给您的 Vagrant 虚拟机。”
    【解决方案2】:

    您必须在 Berksfile 中指定食谱的路径。

     cookbook "artifact", path: "/Users/reset/code/artifact-cookbook"
    

    请看这里:http://berkshelf.com/#path_location

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      相关资源
      最近更新 更多