Vagrant: aprovisionamiento de múltiples VBox-VM con nombres predefinidos

Vagrant: aprovisionamiento de múltiples VBox-VM con nombres predefinidos

Tengo algunos problemas para aprovisionar una configuración de varias máquinas desde un 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

Mi expectativa:el nombre de host dentro de la VM (node.vm.hostname) y el nombre de la máquina VBox están configurados en valores idénticos: nodo-1, nodo-2, nodo-3

Resultado actual:(se eliminaron algunas líneas de la configuración de red, adiciones de invitados y carpetas de sincronización)

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

El nombre de host dentro de la VM está configurado correctamente en "nodo-1" y el nombre de nodo utilizado por Vagrant también. Es sólo el nombre de la máquina VBox el que no está configurado correctamente.

Ya intenté usar diferentes órdenes (bucle de adentro hacia afuera, VBox al final), eliminando guiones del nombre de host, configurando las variables idénticas a v_hostname pero explícitamente para vbox_name.

¿Alguien tiene una idea de lo que está mal aquí?


Información adicional

Agregué otro paso para crear y montar un disco secundario.

vbox.customize ["createmedium", "disk", "--filename", "/mnt/sdb/VirtualBox/disks/"+v_hostname+"-ceph.vdi", "--size", "10240"]

Mientras aún se estaba aprovisionando el primer nodo, pude ver que los tres discos (uno para cada nodo) ya se habían creado y que el disco del tercer nodo estaba conectado al primer nodo.

También intenté agregar "--no-parallel" a "vagrant up" pero no tuve suerte. No estoy seguro de por qué los pasos "vbox.customize" se ejecutan para todas las iteraciones que ya están en el primer ciclo, pero creo que este es el problema aquí.

Respuesta1

Encontré el problema.

config.vm.provider "virtualbox" do |vbox|

debe cambiarse a

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

información relacionada