Vagrant - Provisionando vários VBox-VMs com nomes predefinidos

Vagrant - Provisionando vários VBox-VMs com nomes predefinidos

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

informação relacionada