在 Vagrant 中为多个环境机器创建两个磁盘
Create two disks for multiple environment machines in Vagrant
我将使用 Vagrant 创建一个多环境机器。这是我要配置的 VagrantFile。我想实例化七台机器,它们通过专用网络连接起来。每一个都应该有两个磁盘。我在 Vagrant 文档中找到了公开 createhd
命令的 VBoxManage。我不确定我应该把这个命令放在哪里。在每个机器块内还是在虚拟供应商块配置内?
Vagrant.configure(2) do |config|
config.vm.provision "shell", inline: "echo OpenStack"
config.vm.box = "ubuntu/trusty64"
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "2048", "--cpus", "1"]
end
config.vm.define "machine1" do |machine1|
machine1.vm.hostname = "machine1"
machine1.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine1_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine1_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine1_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine1_disk1.vdi"]
end
machine1.vm.network "private_network", ip: "192.168.10.10"
machine1.vm.network "private_network", ip: "192.168.10.15"
end
config.vm.define "machine2" do |machine2|
machine2.vm.hostname = "machine2"
machine2.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine2_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine2_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine2_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine2_disk1.vdi"]
end
machine2.vm.network "private_network", ip: "192.168.10.20"
machine2.vm.network "private_network", ip: "192.168.10.25"
end
config.vm.define "machine3" do |machine3|
machine3.vm.hostname = "machine3"
machine3.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine3_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine3_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine3_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine3_disk1.vdi"]
end
machine3.vm.network "private_network", ip: "192.168.10.30"
end
config.vm.define "machine4" do |machine4|
machine4.vm.hostname = "machine4"
machine4.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine4_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine4_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine4_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine4_disk1.vdi"]
end
machine4.vm.network "private_network", ip: "192.168.10.40"
end
config.vm.define "machine5" do |machine5|
machine5.vm.hostname = "machine5"
machine5.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine5_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine5_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine5_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine5_disk1.vdi"]
end
machine5.vm.network "private_network", ip: "192.168.10.50"
end
config.vm.define "machine6" do |machine6|
machine6.vm.hostname = "machine6"
machine6.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine6_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine6_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine6_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine6_disk1.vdi"]
end
machine6.vm.network "private_network", ip: "192.168.10.60"
end
config.vm.define "machine7" do |machine7|
machine7.vm.hostname = "machine7"
machine7.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine7_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine7_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine7_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine7_disk1.vdi"]
end
machine7.vm.network "private_network", ip: "192.168.10.70"
end
结束
首先,必须将像 createhd
这样的自定义项添加到提供程序中。
如果将其添加到配置提供程序
config.vm.provider "virtualbox" do |vb|
config.vm.customize ['createhd', '--filename', file_to_disk, '--size', some_size]
config.vm.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_to_disk]
end
会全局定义,所有机器都会用到这些参数。 (不确定) 结果只会创建一个磁盘,并在定义的机器之间共享。
我认为你应该在每台机器上定义提供者。例如
config.vm.define "machine4" do |machine4|
machine4.vm.network "private_network", ip: "192.168.10.40"
machine4.vm.provider :virtualbox do |vb|
vb.customize ["createhd", "--filename", "m4_disk0", "--size", "2048"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "m4_disk0.vdi"]
end
end
请将此Vagrantfile作为参考。
好吧,您真的希望它只创建并附加一次额外的存储空间。我相信上面接受的答案会导致后续运行出错,因为 .VDI 文件已经创建(and 已经附加)。
这样做的方法是用File.exist?
测试VDI文件是否在主机的磁盘上,这意味着它已经被创建了。
对于多机,这可能是您想要的:
(1..3).each do |i|
config.vm.define "node-#{i}" do |node|
node.vm.network "private_network", ip: "192.168.200.#{i}"
file_for_disk = "./large_disk#{i}.vdi"
node.vm.provider "virtualbox" do |v|
unless File.exist?(file_for_disk)
v.customize ['createhd',
'--filename', file_for_disk,
'--size', 80 * 1024]
v.customize ['storageattach', :id,
'--storagectl', 'SATAController',
'--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_for_disk]
end
end
end
end
'This works for me.'
'I thought I share this as it might help Vagrant Newbie like me.'
Vagrant.configure("2") do |config|
file_to_disk = '../second_disk.vdi'
# create CrushFTP nodes
(1..2).each do |i|
config.vm.define "cftpnode#{i}" do |node|
node.vm.customize ['createhd', '--filename', file_to_disk, '--size', 500 * 1024]
node.vm.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_to_disk]
node.vm.box = "bento/centos-7.2"
node.vm.hostname = "cftpnode#{i}"
node.vm.network :private_network, ip: "192.168.0.1#{i}"
node.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
node.vm.provision :shell, path: "bootstrap-node.sh"
end
end
end
我将使用 Vagrant 创建一个多环境机器。这是我要配置的 VagrantFile。我想实例化七台机器,它们通过专用网络连接起来。每一个都应该有两个磁盘。我在 Vagrant 文档中找到了公开 createhd
命令的 VBoxManage。我不确定我应该把这个命令放在哪里。在每个机器块内还是在虚拟供应商块配置内?
Vagrant.configure(2) do |config|
config.vm.provision "shell", inline: "echo OpenStack"
config.vm.box = "ubuntu/trusty64"
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "2048", "--cpus", "1"]
end
config.vm.define "machine1" do |machine1|
machine1.vm.hostname = "machine1"
machine1.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine1_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine1_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine1_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine1_disk1.vdi"]
end
machine1.vm.network "private_network", ip: "192.168.10.10"
machine1.vm.network "private_network", ip: "192.168.10.15"
end
config.vm.define "machine2" do |machine2|
machine2.vm.hostname = "machine2"
machine2.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine2_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine2_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine2_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine2_disk1.vdi"]
end
machine2.vm.network "private_network", ip: "192.168.10.20"
machine2.vm.network "private_network", ip: "192.168.10.25"
end
config.vm.define "machine3" do |machine3|
machine3.vm.hostname = "machine3"
machine3.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine3_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine3_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine3_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine3_disk1.vdi"]
end
machine3.vm.network "private_network", ip: "192.168.10.30"
end
config.vm.define "machine4" do |machine4|
machine4.vm.hostname = "machine4"
machine4.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine4_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine4_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine4_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine4_disk1.vdi"]
end
machine4.vm.network "private_network", ip: "192.168.10.40"
end
config.vm.define "machine5" do |machine5|
machine5.vm.hostname = "machine5"
machine5.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine5_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine5_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine5_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine5_disk1.vdi"]
end
machine5.vm.network "private_network", ip: "192.168.10.50"
end
config.vm.define "machine6" do |machine6|
machine6.vm.hostname = "machine6"
machine6.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine6_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine6_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine6_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine6_disk1.vdi"]
end
machine6.vm.network "private_network", ip: "192.168.10.60"
end
config.vm.define "machine7" do |machine7|
machine7.vm.hostname = "machine7"
machine7.vm.provider "virtualbox" do |vb|
vb.customize ["createhd", "--filename", "machine7_disk0", "--size", "4096"]
vb.customize ["createhd", "--filename", "machine7_disk1", "--size", "4096"]
vb.customize ["storagectl", :id, "--name", "SATA Controller", "--add", "sata"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "machine7_disk0.vdi"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "2", "--type", "hdd", "--medium", "machine7_disk1.vdi"]
end
machine7.vm.network "private_network", ip: "192.168.10.70"
end
结束
首先,必须将像 createhd
这样的自定义项添加到提供程序中。
如果将其添加到配置提供程序
config.vm.provider "virtualbox" do |vb|
config.vm.customize ['createhd', '--filename', file_to_disk, '--size', some_size]
config.vm.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_to_disk]
end
会全局定义,所有机器都会用到这些参数。 (不确定) 结果只会创建一个磁盘,并在定义的机器之间共享。
我认为你应该在每台机器上定义提供者。例如
config.vm.define "machine4" do |machine4|
machine4.vm.network "private_network", ip: "192.168.10.40"
machine4.vm.provider :virtualbox do |vb|
vb.customize ["createhd", "--filename", "m4_disk0", "--size", "2048"]
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "m4_disk0.vdi"]
end
end
请将此Vagrantfile作为参考。
好吧,您真的希望它只创建并附加一次额外的存储空间。我相信上面接受的答案会导致后续运行出错,因为 .VDI 文件已经创建(and 已经附加)。
这样做的方法是用File.exist?
测试VDI文件是否在主机的磁盘上,这意味着它已经被创建了。
对于多机,这可能是您想要的:
(1..3).each do |i|
config.vm.define "node-#{i}" do |node|
node.vm.network "private_network", ip: "192.168.200.#{i}"
file_for_disk = "./large_disk#{i}.vdi"
node.vm.provider "virtualbox" do |v|
unless File.exist?(file_for_disk)
v.customize ['createhd',
'--filename', file_for_disk,
'--size', 80 * 1024]
v.customize ['storageattach', :id,
'--storagectl', 'SATAController',
'--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_for_disk]
end
end
end
end
'This works for me.' 'I thought I share this as it might help Vagrant Newbie like me.'
Vagrant.configure("2") do |config|
file_to_disk = '../second_disk.vdi'
# create CrushFTP nodes
(1..2).each do |i|
config.vm.define "cftpnode#{i}" do |node|
node.vm.customize ['createhd', '--filename', file_to_disk, '--size', 500 * 1024]
node.vm.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_to_disk]
node.vm.box = "bento/centos-7.2"
node.vm.hostname = "cftpnode#{i}"
node.vm.network :private_network, ip: "192.168.0.1#{i}"
node.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
node.vm.provision :shell, path: "bootstrap-node.sh"
end
end
end