如何设置VirtualBox机器名与多机Vagrantfile中的主机名相同?

How to set VirtualBox machine name to be the same as the hostname in multi-machine Vagrantfile?

以下 Vagrantfile 配置将不起作用,因为下一个 VM 的名称与前一个相同。 (顺便说一句,不是 100% 确定,但我认为这曾经在以前的 Vagrant 版本中起作用)。

Vagrant.configure(2) do |config|

  config.vm.define "xfcevm" do |xfcevm|
    xfcevm.vm.box = "generic/ubuntu1904"
    xfcevm.vm.hostname = "xfcevm"
    config.vm.provider "virtualbox" do |vb|
      vb.name = "xfcevm"
    end
  end

  config.vm.define "gnomevm" do |gnomevm|
    gnomevm.vm.box = "generic/fedora30"
    gnomevm.vm.hostname = "gnomevm"
    config.vm.provider "virtualbox" do |vb|
      vb.name = "gnomevm"
    end
  end

  config.vm.provider "virtualbox" do |vb|
    # vb.name = config.vm.hostname
    vb.gui = true
    vb.memory = "3072"
    vb.cpus = 1
    vb.customize ["modifyvm", :id, "--vram", "32"]
  end

  config.vm.provision "ansible" do |ansible|
    ansible.verbose = "v"
    ansible.compatibility_mode = "2.0"
    ansible.playbook = "setup.yml"
  end

  config.vm.provision "ansible", run: 'always' do |ansible|
    ansible.verbose = "v"
    ansible.compatibility_mode = "2.0"
    ansible.playbook = "tests.yml"
  end

end

在行# vb.name = config.vm.hostname中,赋值returns一个对象(用puts打印为#<Object:0x0000000001c191d8>)我不熟悉Ruby 和 Vagrant 足以从它获取一个字符串属性,如果从那个对象中甚至可能的话。

P.S。一个解决方法(这个问题的另一个问题)是从 Ansible 剧本中获取 运行 VirtualBox 机器名称,因为目标一直在该虚拟机上调用 VBoxManage 作为 local_action 从内部Ansible 剧本。

您是 运行 config 全局对象上的 virtualbox 提供者。

    # Wrong for multivm
    # This sets a default name for all vms
    config.vm.provider "virtualbox" do |vb|
      vb.name = "gnomevm"
    end

只需在您定义的当前虚拟机上调用它(gnomevm 的示例)

    # Correct
    # This sets the specific name for this vm only
    gnomevm.vm.provider "virtualbox" do |vb|
      vb.name = "gnomevm"
    end