【发布时间】:2016-07-22 10:12:45
【问题描述】:
我在根项目中有一个食谱文件夹,其中也有 Vagrantfile。 我只有几本食谱(starter 依赖于 "apt",数据库依赖于 mysql)。这些食谱是使用 berks cookbook 生成的。
现在的问题是在 Vagrantfile 中设置 config.berkshelf.berksfile_path 时,我不知道是放 ./cookbooks/starter/Berksfile 还是./cookbooks/database/Berksfile 因为两本食谱都有 berks 依赖项。
我尝试了多种选择,例如将这些食谱移入 cookbooks-src 并遍历它们中的每一个并执行 berks vendor ../../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'
【问题讨论】:
-
能否将
Berksfiles 和depends的输出添加到metadata.rb文件中?只是为了检查你没有任何不寻常的依赖。可能您需要创建另一个包含其他两个说明书的 Berksfile。 -
我刚刚将您要求的内容添加到主要问题中。我试图在这几本食谱所在的根文件夹中添加一个berksfile,但随后vagrant会抱怨berksfile旁边没有metadata.rb。我尝试了一种实际可行但不是我想要的解决方法。我只是通过路径属性在我的 starter/berksfile 中放入了对数据库说明书的依赖项,并将数据库/berksfile 的所有依赖项移动到 starter/berksfile 中,最后是供应商 starter 说明书,但这又不是我真正想要的随心所欲地工作。
标签: vagrant chef-infra berkshelf