Ruby 在Vagrant中为多台环境计算机创建两个磁盘

Ruby 在Vagrant中为多台环境计算机创建两个磁盘,ruby,virtual-machine,vagrant,virtualbox,vagrantfile,Ruby,Virtual Machine,Vagrant,Virtualbox,Vagrantfile,我要用Vagrant创建一个多环境机器。这是我试图配置的Vagrant文件。我想举例说明七台机器通过专用网络将它们连接起来。每个磁盘都应该有两个磁盘。我在Vagrant文档中找到了公开createhd命令的VBoxManage。我不确定该把这个命令放在哪里。在每个机器块内还是在虚拟提供程序块配置内 Vagrant.configure(2) do |config| config.vm.provision "shell", inline: "echo OpenStack" con

我要用Vagrant创建一个多环境机器。这是我试图配置的Vagrant文件。我想举例说明七台机器通过专用网络将它们连接起来。每个磁盘都应该有两个磁盘。我在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

请将此作为参考

首先,必须将自定义项(如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

请将此作为参考

那么,您真的希望它只创建并附加一次额外的存储。我相信上面接受的答案将在后续运行中导致错误,因为.VDI文件已创建并已附加

执行此操作的方法是测试VDI文件是否位于主机磁盘上的file.exist?,这意味着它已被创建

对于多台计算机,这可能是您想要的:

(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

嗯,您真的希望它只创建并附加一次额外的存储。我相信上面接受的答案将在后续运行中导致错误,因为.VDI文件已创建并已附加

执行此操作的方法是测试VDI文件是否位于主机磁盘上的file.exist?,这意味着它已被创建

对于多台计算机,这可能是您想要的:

(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
“这对我有用。” 我想我会分享这个,因为它可能会帮助像我这样的流浪新手

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.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

我尝试创建配置文件,但遇到了一些有关存储控制器的问题。我应该创建多少控制器?编辑了配置文件我遇到以下错误:VBoxManage:错误:此类型的存储控制器太多我已尝试创建配置文件,但遇到了有关存储控制器的一些问题。我应该创建多少控制器?编辑了配置文件我收到以下错误:VBoxManage:错误:此类型的存储控制器太多