![Vagrant - Provisionando vários VBox-VMs com nomes predefinidos](https://rvso.com/image/756270/Vagrant%20-%20Provisionando%20v%C3%A1rios%20VBox-VMs%20com%20nomes%20predefinidos.png)
Tenho alguns problemas para provisionar uma configuração de várias máquinas a partir de um Vagrantfile.
VM_NAME="node"
IMAGE_NAME="centos/7"
Nodes=3
NodeMEM=4096
NodeCPU=2
NodeGUI=false
(1..Nodes).each do |i|
Vagrant.configure("2") do |config|
v_hostname=VM_NAME+"-#{i}"
config.vm.define "node-#{i}" do |node|
node.vm.box = IMAGE_NAME
config.vm.provider "virtualbox" do |vbox|
vbox.memory = NodeMEM
vbox.cpus = NodeCPU
vbox.gui = NodeGUI
vbox.name = v_hostname
end
node.vm.hostname=v_hostname
end
end
end
Minha expectativa:o nome do host dentro da VM (node.vm.hostname) e o nome da máquina VBox são definidos com valores idênticos: node-1, node-2, node-3
Resultado atual:(algumas linhas foram removidas das configurações de rede, adições de convidados e pastas de sincronização)
#> vagrant up
Bringing machine 'node-1' up with 'virtualbox' provider...
Bringing machine 'node-2' up with 'virtualbox' provider...
Bringing machine 'node-3' up with 'virtualbox' provider...
==> node-1: Importing base box 'centos/7'...
==> node-1: Matching MAC address for NAT networking...
==> node-1: Checking if box 'centos/7' version '2004.01' is up to date...
==> node-1: Setting the name of the VM: node-3
==> node-1: Clearing any previously set network interfaces...
[...]
==> node-1: Setting hostname...
[...]
==> node-2: Importing base box 'centos/7'...
==> node-2: Matching MAC address for NAT networking...
==> node-2: Checking if box 'centos/7' version '2004.01' is up to date...
A VirtualBox machine with the name 'node-3' already exists.
Please use another name or delete the machine with the existing
name, and try again.
O nome do host dentro da VM está definido corretamente como "node-1" e o nome do nó usado pelo Vagrant também. É apenas o nome da máquina VBox que não está definido corretamente.
Já tentei usar ordens diferentes (loop de dentro para fora, VBox no final), removendo traços do nome do host, definindo as variáveis idênticas ao v_hostname, mas explicitamente para vbox_name.
Alguém tem uma ideia do que há de errado aqui?
Informações adicionais
Adicionei outra etapa para criar e montar um disco secundário.
vbox.customize ["createmedium", "disk", "--filename", "/mnt/sdb/VirtualBox/disks/"+v_hostname+"-ceph.vdi", "--size", "10240"]
Enquanto o primeiro nó ainda estava sendo provisionado, pude ver que todos os três discos (um para cada nó) já foram criados e o disco do terceiro nó foi anexado ao primeiro nó.
Também tentei adicionar "--no-parallel" a "vagrant up", mas sem sorte. Não sei por que as etapas "vbox.customize" são executadas para todas as iterações já no primeiro loop, mas acho que esse é o problema aqui.
Responder1
Eu encontrei o problema.
config.vm.provider "virtualbox" do |vbox|
deve ser alterado para
node.vm.provider "virtualbox" do |vbox|
(1..Nodes).each do |i|
Vagrant.configure("2") do |config|
v_hostname=VM_NAME+"-#{i}"
config.vm.define v_hostname do |node|
node.vm.box = IMAGE_NAME
node.vm.provider "virtualbox" do |vbox|
vbox.memory = NodeMEM
vbox.cpus = NodeCPU
vbox.gui = NodeGUI
vbox.name = v_hostname
end
node.vm.hostname=v_hostname
end
end
end