如何设置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
以下 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