Vagrant - Bereitstellung mehrerer VBox-VMs mit vordefinierten Namen

Vagrant - Bereitstellung mehrerer VBox-VMs mit vordefinierten Namen

Ich habe ein paar Probleme beim Bereitstellen einer Konfiguration mit mehreren Rechnern aus einer Vagrant-Datei.

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

Meine Erwartung:der Hostname innerhalb der VM (node.vm.hostname) und der VBox-Maschinenname werden auf identische Werte gesetzt: node-1, node-2, node-3

Tatsächliche Ergebnis:(einige Zeilen aus den Netzwerkeinstellungen, Gasterweiterungen und Rsyncing-Ordnern entfernt)

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

Der Hostname innerhalb der VM ist korrekt auf „node-1“ eingestellt und der von Vagrant verwendete Knotenname ebenfalls. Nur der Name der VBox-Maschine ist nicht richtig eingestellt.

Ich habe bereits versucht, unterschiedliche Reihenfolgen zu verwenden (Schleife von innen nach außen, VBox am Ende), Bindestriche aus dem Hostnamen zu entfernen und die Variablen identisch mit v_hostname, aber explizit für vbox_name festzulegen.

Hat jemand eine Idee, was hier nicht stimmt?


Weitere Informationen

Ich habe einen weiteren Schritt hinzugefügt, um eine sekundäre Festplatte zu erstellen und zu mounten.

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

Während der erste Knoten noch bereitgestellt wurde, konnte ich sehen, dass alle drei Festplatten (eine für jeden Knoten) bereits erstellt worden waren und die Festplatte des dritten Knotens an den ersten Knoten angeschlossen war.

Ich habe auch versucht, „--no-parallel“ zu „vagrant up“ hinzuzufügen, aber ohne Erfolg. Ich bin nicht sicher, warum die „vbox.customize“-Schritte bereits in der ersten Schleife für alle Iterationen ausgeführt werden, aber ich denke, das ist hier das Problem.

Antwort1

Ich habe das Problem gefunden.

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

muss geändert werden in

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

verwandte Informationen