由于下一个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
。
答案 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