一个Vagrantfile中的多个VM.我可以为每个人设置不同的内存大小吗?

use*_*088 18 virtualbox vagrant vagrantfile

config.vm.define :web do |web_config|
    web_config.vm.box = "saucy"
    web_config.vm.host_name = "web"
    web_config.vm.network "private_network", ip:"192.168.100.10"
end

config.vm.define :db do |db_config|
    db_config.vm.box = "saucy"
    db_config.vm.host_name = "db"
    db_config.vm.network "private_network", ip:"192.168.100.20"
end

config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "1024"]
    vb.customize ["modifyvm", :id, "--cpus", "2"]
end
Run Code Online (Sandbox Code Playgroud)

我配置了两个VM,'db'和'web'.我可以为不同的VM设置不同的内存大小吗?

Bri*_*anC 27

2016-08-31:更新了每个@DarkForce请求包含整个Vagrantfile的答案.

您可以通过移动vm.provider每个vm.define块内的定义来实现.例如,此配置将"web"的内存设置为2048MB,"db"的内存为1024MB:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"

  config.vm.define :web do |web_config|
      web_config.vm.host_name = "web"
      web_config.vm.network "private_network", ip:"192.168.100.10"
      web_config.vm.provider :virtualbox do |vb|
          vb.customize ["modifyvm", :id, "--memory", "2048"]
          vb.customize ["modifyvm", :id, "--cpus", "2"]
      end
  end

  config.vm.define :db do |db_config|
      db_config.vm.host_name = "db"
      db_config.vm.network "private_network", ip:"192.168.100.20"
      db_config.vm.provider :virtualbox do |vb|
          vb.customize ["modifyvm", :id, "--memory", "1024"]
          vb.customize ["modifyvm", :id, "--cpus", "2"]
      end
  end
end
Run Code Online (Sandbox Code Playgroud)

注意:此示例(与Vagrant文​​档中的许多示例一样)仅适用于VirtualBox.如果您希望Vagrantfile也可以与VMware或其他提供程序一起使用,则将单独列出自定义参数.例如:

x.vm.provider "vmware_fusion" do |v|
  v.vmx["memsize"] = "3000"
end
x.vm.provider :virtualbox do |v|
  v.customize ["modifyvm", :id, "--memory", "3000"]
end
Run Code Online (Sandbox Code Playgroud)


小智 6

最好的方法是使用像这里的Ruby数组哈希 - http://sysadm.pp.ua/linux/sistemy-virtualizacii/vagrantfile.html.你可以定义数组:

    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
      }
    ]
Run Code Online (Sandbox Code Playgroud)

然后你只需迭代服务器数组中的每个项目并定义配置:

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]]
Run Code Online (Sandbox Code Playgroud)


yda*_*coR 5

Vagrant还提供了以下便捷的内存和CPU设置快捷方式:

config.vm.provider "virtualbox" do |v|
  v.memory = 1024
  v.cpus = 2
end
Run Code Online (Sandbox Code Playgroud)

因此,在您的情况下,为DB盒提供的CPU和内存是Web盒的两倍,它看起来像:

config.vm.define :web do |web_config|
    web_config.vm.box = "saucy"
    web_config.vm.host_name = "web"
    web_config.vm.network "private_network", ip:"192.168.100.10"
    web_config.vm.provider :virtualbox do |vb|
        vb.memory = 1024
        vb.cpus = 2
    end
end

config.vm.define :db do |db_config|
    db_config.vm.box = "saucy"
    db_config.vm.host_name = "db"
    db_config.vm.network "private_network", ip:"192.168.100.20"
    db_config.vm.provider :virtualbox do |vb|
        vb.memory = 2048
        vb.cpus = 4
    end
end
Run Code Online (Sandbox Code Playgroud)


小智 5

我只是尝试使用上述解决方案并意识到,在我的环境中,所有内存设置都是相同的。代码片段似乎有一个小拼写错误 - 不使用config.vm.provider ...但用于<yourConfigVariable>.vm.provider...设置机器相关值。

AFAIK 正确的代码如下所示:

config.vm.define :web do |web_config|
    web_config.vm.box = "saucy"
    web_config.vm.host_name = "web"
    web_config.vm.network "private_network", ip:"192.168.100.10"
    web_config.vm.provider :virtualbox do |vb|
        vb.customize ["modifyvm", :id, "--memory", "2048"]
        vb.customize ["modifyvm", :id, "--cpus", "2"]
    end
end

config.vm.define :db do |db_config|
    db_config.vm.box = "saucy"
    db_config.vm.host_name = "db"
    db_config.vm.network "private_network", ip:"192.168.100.20"
    db_config.vm.provider :virtualbox do |vb|
        vb.customize ["modifyvm", :id, "--memory", "1024"]
        vb.customize ["modifyvm", :id, "--cpus", "2"]
    end
end
Run Code Online (Sandbox Code Playgroud)