我需要使用Vagrant运行多个虚拟机。
是否有方法可以做到这一点?
这些虚拟机彼此之间没有任何关系,可以将它们视为用于测试的不同环境,因此似乎多机设置与此无关。
我需要使用Vagrant运行多个虚拟机。
是否有方法可以做到这一点?
这些虚拟机彼此之间没有任何关系,可以将它们视为用于测试的不同环境,因此似乎多机设置与此无关。
最好的方法是使用一组散列。您可以像这样定义数组:
(array of hashes)servers=[
{
:hostname => "web",
:ip => "192.168.100.10",
:box => "saucy",
:ram => 1024,
:cpu => 2
},
{
:hostname => "db",
:ip => "192.168.100.11",
:box => "saucy",
:ram => 2048,
:cpu => 4
}
]
然后您只需迭代服务器数组中的每个项目并定义配置:
Vagrant.configure(2) do |config|
servers.each do |machine|
config.vm.define machine[:hostname] do |node|
node.vm.box = machine[:box]
node.vm.hostname = machine[:hostname]
node.vm.network "private_network", ip: machine[:ip]
node.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", machine[:ram]]
end
end
end
end
.vagrant
目录中。Vagrantfile
的目录复制到新位置,然后从该目录运行vagrant up
。vagrant up
,那么在复制完成后请删除copied_directory/.vagrant
。.vagrant/
目录,则删除它是关键。 - wired00您甚至可以在同一目录中使用不同的 Vagrantfile 来配置不同的虚拟机或虚拟盒子。
VAGRANT_VAGRANTFILE=Vagrantfile.ubntu_1404_64 VAGRANT_DOTFILE_PATH=.vagrant_ub140464 vagrant up
或者
VAGRANT_VAGRANTFILE=Vagrantfile.ubntu_1404_32 VAGRANT_DOTFILE_PATH=.vagrant_ub140432 vagrant up
两个Vagrantfile可以驻留在同一个目录中
Vagrant.configure("2") do |winconfig|
# stuff
end
Vagrant.configure("2") do |nixconfig|
# stuff
end
Vagrant.configure("2") do |macconfig|
# stuff
end
然后我可以使用vagrant up --parallel
命令启动它们。正如其他人所提到的,不同的vagrant文件可能更易于维护。
https://www.vagrantup.com/docs/vagrantfile/tips.html#loop-over-vm-definitions
(1..3).each do |i|
config.vm.define "node-#{i}" do |node|
node.vm.provision "shell",
inline: "echo hello from node #{i}"
end
end
如果虚拟机无法协作,将包含Vagrantfile的目录复制到新位置并在那里启动新机器是最直接的方法。
然而,您可能不想为了版本控制和回溯目的而复制/粘贴VCS脚本。将所有脚本放在一个文件夹中,例如dev
,并将Vagrantfile
放在dev
下的编号文件夹中,例如dev/10
。当您创建一个新版本,例如dev/11
并且不需要旧版本时,您可以将其删除。并使用相对路径引用通用的配置脚本:
config.vm.provision "shell", path: "../provisioner.sh"
.vagrant
目录中。补充回答。 - famousgarkin