我创建了一个具有一些服务器设置和自定义的VM,并使用了vagrant to 创建一个盒子。我把盒子装进了流浪汉,所以我可以旋转不止一个 具有相同配置的服务器。
还创建了一个具有客户端设置的VM,并将其与vagrant一起装箱,以便我可以创建 多个客户。
我想知道是否可以在同一个Vagrantfile 块中使用 使用server_box的服务器代码和客户端的代码块 使用client_box。我虽然可以为每个人使用 config.vm.box 但是什么时候 我启动虚拟机,客户端拿起client_box映像,这就是我 想要,但服务器也会忽略自己的设置来获取client_box图像。
我的尝试如下。 注意:我知道我可以使用循环来创建一系列客户端。为了简单和清晰,我只是将代码放在下面。
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "server_box"
config.vm.define "server1", primary: true do |server1|
[...vm specs here...]
end
end
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "client_box"
config.vm.define "client1", autostart: false do |client1|
[...vm specs here...]
end
config.vm.define "client2", autostart: false do |client2|
[...vm specs here...]
end
end
答案 0 :(得分:1)
是的,您可以使用config.vm.define
方法调用指定多台计算机,例如
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: "echo Hello"
config.vm.define "web" do |web|
web.vm.box = "apache"
end
config.vm.define "db" do |db|
db.vm.box = "mysql"
end
end
请参阅:Defining multiple machines at Vagranup Docs
您还可以使用switch case语法,因此您可以根据某个变量设置box,例如
case provider
when "virtualbox"
config.vm.box = "ubuntu/wily64"
when "aws"
config.vm.box = "dummy"
end
或者根据环境变量设置web.vm.box
,例如
config.vm.box = ENV['BOX']
并从命令行提供值,如:
BOX=server_box vagrant up