Multi VM в одном 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
У меня есть две конфигурации: VM, 'db' и 'web'.
Могу ли я установить различный размер памяти для разных виртуальных машин?
Ответы
Ответ 1
2016-08-31: Обновленный ответ для включения всего Vagrantfile в запрос @DarkForce.
Это можно сделать, перемещая определение vm.provider
внутри каждого из блоков vm.define
. Например, эта конфигурация устанавливает память на 2048 МБ для "сети" и 1024 МБ для "db":
# -*- 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
Примечание. Этот пример (как и многие из документов 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
Ответ 2
Лучший способ - использовать массив хешей 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
}
]
Затем вы просто перебираете каждый элемент в массиве сервер и определяете конфиги:
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]]
Ответ 3
Я просто попытался использовать вышеупомянутые решения и понял, что в моей среде все настройки памяти одинаковы. У фрагментов кода есть небольшая опечатка - не используйте 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
Ответ 4
У Vagrant также есть удобные ярлыки для настроек памяти и процессора, которые имеют следующий вид:
config.vm.provider "virtualbox" do |v|
v.memory = 1024
v.cpus = 2
end
Итак, в вашем случае, и чтобы дважды отдавать процессоры и память блокам DB, чем веб-боксы, это выглядело бы примерно так:
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