vagrant Berkshelf berksfile_path

时间:2016-04-02 16:50:47

标签: vagrant chef berkshelf

我在root项目中有一个cookbook文件夹,它也有Vagrantfile。 我只有几本烹饪书(首发取决于“apt”,数据库依赖于 mysql )。这些烹饪书是用berks cookbook制作的。

现在问题是在Vagrantfile中设置 config.berkshelf.berksfile_path ,我不知道是否放入 ./ cookbooks / starter / Berksfile ./ cookbooks / database / Berksfile 因为两本烹饪书都有berks依赖。

我尝试了多种选择,比如将这些食谱移到 cookbooks-src 中并遍历每一个并执行 berks vendor ../../ cookbooks 但是没有因为第二家供应商生成的食谱会覆盖以前的食谱。

还尝试将每个cookbooks依赖项提供给 ./ cookbooks / the-cookbook / cookbooks ,但是vagrant不会识别它们。

这是我的流浪文件:

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.hostname = "chef-DK"

  config.vm.provider "virtualbox" do |v|
    v.customize ["modifyvm", :id, "--cpuexecutioncap", "67"]
    v.memory = 537
  end

  config.berkshelf.enabled = true
  config.berkshelf.berksfile_path = "./cookbooks/starter/Berksfile"
  config.vm.provision :chef_solo do |chef|
    chef.install = false  

    chef.run_list = [
      'recipe[starter::default]',
      'recipe[database::default]'
    ]
  end
end

project/
├── cookbooks/
│   ├── database
│   │         ├── recipes
│   │         ├── Berksfile
│   │         └── metadata.rb
│   └── starter
│             ├── recipes
│             ├── Berksfile
│             └── metadata.rb
└── Vagrantfile

============================================

starter / metadata.rb的内容:

name             'starter'
maintainer       'YOUR_NAME'
maintainer_email 'YOUR_EMAIL'
license          'All rights reserved'
description      'Installs/Configures starter'
long_description 'Installs/Configures starter'
version          '0.1.0'

depends 'apt', '~> 3.0.0'

starter / Berksfile的内容:

source "https://supermarket.chef.io"

metadata

cookbook 'apt', '~> 3.0.0'

============================================

database / metadata.rb的内容:

name 'database'
maintainer 'The Authors'
maintainer_email 'you@example.com'
license 'all_rights'
description 'Installs/Configures database'
long_description 'Installs/Configures database'
version '0.1.0'

depends 'mysql', '~> 6.0'

数据库/ Berksfile的内容:

source "https://supermarket.chef.io"

metadata

cookbook 'mysql', '~> 6.1.3'

1 个答案:

答案 0 :(得分:0)

首先,我想澄清berkshelf metadata指令读取食谱 metadata.rb (即 Berksfile中的cookbook条目< / em> s似乎多余了。)

在您的情况下,您可以在主项目/ 目录( Vagrantfile 旁边)中创建 Berksfile ,其中包含以下内容:< / p>

source 'https://supermarket.chef.io'

cookbook 'database', path: 'cookbooks/database'
cookbook 'starter', path: 'cookbooks/starter'

然后将其添加到 Vagrantfile

config.berkshelf.berksfile_path = './Berksfile'

我认为您的问题是您在流浪的Berksfile中添加了metadata指令,这就是为什么您收到“没有metadata.rb”错误的原因。