我在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'
答案 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”错误的原因。