Vagrant - 사전 정의된 이름으로 여러 VBox-VM 프로비저닝

Vagrant - 사전 정의된 이름으로 여러 VBox-VM 프로비저닝

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

내 기대:VM 내부의 호스트 이름(node.vm.hostname)과 VBox 시스템 이름은 동일한 값으로 설정됩니다: node-1, node-2, node-3

실제 결과:(네트워크 설정, 게스트 추가 및 rsyncing 폴더에서 일부 줄을 제거했습니다)

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

VM 내부의 호스트 이름은 "node-1"로 올바르게 설정되고 Vagrant에서도 사용되는 노드 이름입니다. 올바르게 설정되지 않은 것은 VBox 시스템 이름뿐입니다.

나는 이미 다른 순서(내부 루프, 끝의 VBox)를 사용하여 호스트 이름에서 대시를 제거하고 변수를 v_hostname과 동일하지만 vbox_name에 대해 명시적으로 설정해 보았습니다.

여기에 무슨 문제가 있는지 아는 사람이 있나요?


추가 정보

보조 디스크를 생성하고 마운트하는 또 다른 단계를 추가했습니다.

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

첫 번째 노드가 아직 프로비저닝되는 동안 세 개의 디스크(각 노드당 하나씩)가 모두 이미 생성되었고 세 번째 노드의 디스크가 첫 번째 노드에 연결된 것을 볼 수 있었습니다.

나는 또한 "vagrant up"에 "--no-parallel"을 추가하려고 시도했지만 운이 없었습니다. 첫 번째 루프에서 이미 모든 반복에 대해 "vbox.customize" 단계가 실행되는 이유를 잘 모르겠지만 이것이 여기서 문제라고 생각합니다.

답변1

문제를 발견했습니다.

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

로 변경해야 합니다.

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

관련 정보