如何在多个计算机的Vagrantfile中将VirtualBox的计算机名设置为与主机名相同?

时间:2019-10-29 12:12:14

标签: ruby ansible vagrant vagrantfile

由于下一个VM与先前的虚拟机具有相同的名称,因此以下Vagrantfile配置将不起作用。 (顺便说一句,不是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行中,赋值返回一个对象(它以puts的形式以#<Object:0x0000000001c191d8>打印)并且我对Ruby和Vagrant不够熟悉,无法获得字符串属性如果可能的话,也可以从该对象中获取。

P.S。一种解决方法(对此问题的替代问题)是从Ansible剧本中获取正在运行的VirtualBox计算机名称,因为目标是从Ansible剧本中以VBoxManage的形式在该虚拟机上调用local_action

1 个答案:

答案 0 :(得分:1)

您正在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