Vagrant文档建议使用一个do |config|
块来定义多台计算机。当将每个盒子外包到一个单独的部分Vagrantfile配置文件中时,我无法执行此工作。它似乎可以与多个配置块一起使用,但是使用VirtualBox不能并行配置。
编辑:Parallel execution doesn't seem to work on VirtualBox
do |config|
块有什么缺点?config
对象?我正在处理一个Vagrantfile,该文件应创建具有不同配置的多台计算机。为了避免弄乱单个Vagrantfile,我需要这样的模块化设计:
Vagrantfile
vagrant
-- Vagrantfile.service1
-- Vagrantfile.service2
The Vagrant documentation使用单个config
块定义内部的多台计算机。但是所有机器都在同一个Vagrantfile中提供。为了保持模块化的,分离的文件,我只发现了this repo,其中所有部分配置都包含在config
块的 outside 中,因此每个文件中只有一个config
块机器配置。在流浪汉文档示例中,它看起来像这样:
# File Vagrantfile-service1
Vagrant.configure("2") do |config|
config.vm.box = "apache"
end
# File Vagrantfile-service2
Vagrant.configure("2") do |config|
config.vm.box = "mysql"
end
但是根据github示例,我需要像这样在基Vagrantfile
中包含这些文件:
path1 = "vagrant/Vagrantfile.service1"
load File.expand_path(path1) if File.exists?(path1)
path2 = "vagrant/Vagrantfile.service2"
load File.expand_path(path2) if File.exists?(path2)
如您所见,这仅适用于多个do |config|
部分。基本的Vagrantfile不包含任何内容。由于无业游民的文档说:
重要的是,您也可以继续使用config对象。
我试图在Vagrantfile中定义一个配置块并包含我的部分文件:
Vagrant.configure("2") do |config|
path1 = "vagrant/Vagrantfile.service1"
load File.expand_path(path1) if File.exists?(path1)
# ...
end
想法是在config
中使用vagrant/Vagrantfile.service1
对象,以便该文件仅包含
config.vm.define "web" do |web|
web.vm.box = "apache"
end
适合无业游民的文档。但这是行不通的。尽管我不太熟悉Ruby,但看来config
必须是基数Vagrantfile
中的全局变量。所以我尝试了
Vagrant.configure("2") do |$config|
path1 = "vagrant/Vagrantfile.service1"
load File.expand_path(path1) if File.exists?(path1)
# ...
end
通知$config
使其全局,从而导致此错误:
Vagrantfile:21: formal argument cannot be a global variable
grant.configure(2) do |$config|
^
我也尝试了以下失败的尝试:
Vagrant.configure(2) do |_config|
$config = _config
# ...
答案 0 :(得分:0)
请尝试使用load
来代替eval
中的父项Vagrantfile
config
。
vagrant/Vagrantfile.service1