Vagrant 流浪者berksfile_路
我在根项目中有一个cookbooks文件夹,其中也有Vagrant文件。 我只有几本食谱(starter依赖于“apt”,数据库依赖于mysql)。这些食谱是用伯克斯食谱制作的 现在的问题是,当在Vagrant文件中设置config.berkshellf.berksfile_路径时,我不知道是放置./cookbooks/starter/berksfile还是./cookbooks/database/berksfile,因为这两本书都有berks依赖项 我尝试了多种选择,比如将这些烹饪书移动到cookbooks src中,并对每一本进行迭代,然后执行berks vendor.././cookbooks,但都不起作用,因为第二本供应商生成的烹饪书将覆盖前一本 还尝试将每个cookbooks依赖项添加到./cookbooks/the cookbook/cookbooks中,但流浪汉无法识别它们 这是我的流浪汉档案:Vagrant 流浪者berksfile_路,vagrant,chef-infra,berkshelf,Vagrant,Chef Infra,Berkshelf,我在根项目中有一个cookbooks文件夹,其中也有Vagrant文件。 我只有几本食谱(starter依赖于“apt”,数据库依赖于mysql)。这些食谱是用伯克斯食谱制作的 现在的问题是,当在Vagrant文件中设置config.berkshellf.berksfile_路径时,我不知道是放置./cookbooks/starter/berksfile还是./cookbooks/database/berksfile,因为这两本书都有berks依赖项 我尝试了多种选择,比如将这些烹饪书移动到co
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'
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'
starter/Berksfile的内容:
source "https://supermarket.chef.io"
metadata
cookbook 'apt', '~> 3.0.0'
source "https://supermarket.chef.io"
metadata
cookbook 'mysql', '~> 6.1.3'
============================================
数据库/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'
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 'apt', '~> 3.0.0'
source "https://supermarket.chef.io"
metadata
cookbook 'mysql', '~> 6.1.3'
首先,我想澄清一下,BerksShelf
metadata
指令读取cookbook metadata.rb(即,您的BerksFile中的cookbook
条目似乎是多余的)
在您的情况下,您可以在主项目/目录(Vagrantfile旁边)中创建一个包含以下内容的Berksfile:
源代码'https://supermarket.chef.io'
食谱“数据库”,路径:“食谱/数据库”
菜谱“初学者”,路径:“菜谱/初学者”
然后将其添加到您的Vagrant文件中:
config.berkshellf.berksfile_path='./berksfile'
我想你的问题是你在你的流浪汉Berksfile中添加了一个
元数据
指令,这就是为什么你会得到“there's not metadata.rb”错误。你能在元数据.rb
文件中添加Berksfile
的输出和依赖项吗?只是为了确认你没有任何不寻常的依赖。也许你需要创建第三个Berksfile,其中包括另外两本烹饪书。我刚刚在主要问题中添加了你要求的内容。我试图在这两本烹饪书所在的根文件夹中添加一个berksfile,但vagrant会抱怨berksfile旁边没有metadata.rb。我尝试了一个可行的解决办法,但不是我想要的。我只是在我的starter/berksfile中添加了一个通过path属性到数据库cookbook的依赖项,并将数据库/berksfile的所有依赖项都移动到starter/berksfile,最后是供应商starter cookbook中,但这并不是我想要的,当它真正按照我想要的方式工作时。不知道是什么让你“思考”因为这里有5个文件的内容。谢谢你的提示,我可以在vagrant旁边的根目录中添加一个额外的berksfile,但是它仍然会提示关于元数据的错误。rb谢谢你关于放置烹饪书的相对路径的提示。我认为有解决办法,但不是真正的解决办法。我是这么小的测试,如果有人能测试这个?创建两本食谱,每本都带有伯克斯依赖项,并尝试提供一个流浪者盒子。在回答你的问题之前,我测试了这个,它成功了。也许我没有正确地解释我自己。我使用的是vagrant版本1.6.5
、Berkshell版本4.3.0
和vagrant Berkshell
插件版本4.1.0
。我的意思是,当您尝试使用根Berksfile时,您在其中添加了metadata
指令,这就是为什么会出现metadata.rb错误的原因。如果您不添加元数据
指令,它不应该抱怨需要metadata.rb。因此,我应该有一个空的metadata.rb文件。我会试试。不,你不需要空的metadata.rb。简单地说,不要将元数据指令放在vagrant使用的根Berksfile中。如果您这样做,它不应该抱怨metadata.rb丢失。