Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vagrant 流浪者berksfile_路_Vagrant_Chef Infra_Berkshelf - Fatal编程技术网

Vagrant 流浪者berksfile_路

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

我在根项目中有一个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.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丢失。