How to configure multiple monitors for the provider vmware-workstation in Vagrantfile?
For the provider virtualbox this can be done as follows:
config.vm.provider :virtualbox do |vb|
vb.gui = true
vb.customize ["modifyvm", :id, "--monitorcount", "2"]
As result the vm will be displayed on 2 monitors. How can I do this for vmware-workstation?
I have no VMware Workstation at hand, but according to this reference, the parameter you're searching for is svga.numDisplays.
So the resulting snippet for the Vagrantfile should be
config.vm.provider "vmware_fusion" do |v|
v.vmx["svga.numDisplays"] = 2
v.vmx["svga.autodetect"] = "FALSE"
end
Related
The following Vagrantfile configuration won't work as the next VM gets the same name as previous one. (BTW, not 100% sure, but I think this used to work in previous Vagrant versions).
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
In the line # vb.name = config.vm.hostname, the assignment returns an object (it is printed with puts as #<Object:0x0000000001c191d8>) and I'm not familiar with Ruby and Vagrant enough to get a string attribute from it if that's even possible from that object.
P.S. a workaround (an alternative question to this one) would be to get the running VirtualBox machine name from Ansible playbook, as the goal has been calling VBoxManage on that virtual machine as local_action from inside the Ansible playbook.
You are running the virtualbox provider on the config global object.
# Wrong for multivm
# This sets a default name for all vms
config.vm.provider "virtualbox" do |vb|
vb.name = "gnomevm"
end
Simply call this on the current vm you are defining (example for gnomevm)
# Correct
# This sets the specific name for this vm only
gnomevm.vm.provider "virtualbox" do |vb|
vb.name = "gnomevm"
end
I have created vagrant box by using these settings:
Vagrant.configure("2") do |config|
config.ssh.forward_x11 = true
config.vm.define 'test2' do |machine|
machine.vm.box = "ubuntu/xenial64"
machine.vm.network :public_network, ip: "192.168.33.23"
machine.disksize.size = "15GB"
machine.vm.synced_folder "./data", "/root/data"
machine.vm.provider "virtualbox" do |v|
v.name = 'test2'
v.customize ["modifyvm", :id, "--memory", 3072]
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/data", "1"]
end
end
end
I can connect to this box via ssh, but when I try to ping it like this:
ping 192.168.33.23
It throws to me timeout error. Why this is happening?
ssh and ping use different ports, probably when trying to ping that IP, server probably denies public access. Try to use telnet with specific port instead to see if port is opened and accessible.
I have two Windows Vagrant boxes (Win 7 & Win 8). I would like to automatically update Guest Additions in that boxes. I have tried vagrant-vbguest plugin - but it doesn't work - exit code - Sorry, don't know how to check guest version of VirtualBox Guest Additions on this platform. Stopping installation.
Vagrant version:
Installed Version: 1.9.2
VirtualBox version:
5.1.18
Vagrantfile
Vagrant.configure("2") do |config|
# General settings for all VMs
config.vm.communicator = "winrm"
config.vm.boot_timeout = 600
config.vm.graceful_halt_timeout = 600
config.vm.network "public_network", auto_config: true
config.vm.provision :shell, path: "Auto_Logon.ps1"
config.vbguest.iso_path = "http://download.virtualbox.org/virtualbox/5.1.18/VBoxGuestAdditions_5.1.18.iso"
# Win7 VM
config.vm.define "win7" do |win7|
win7.vm.box_url = "file:///VagrantBoxes_Win_Series/windows_7_virtualbox.box"
win7.vm.box = "windows_7_virtualbox"
configure_provider(win7, "Win_7_x64_Mult")
end
# Windows 8 VM
config.vm.define "win8" do |win8|
win8.vm.box_url = "file:///VagrantBoxes_Win_Series/Windows8_x64.box"
win8.vm.box = "Windows8_x64"
configure_provider(win8, "Win_8_x64_Mult")
end
end
def configure_provider (node, node_name)
node.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--usb", "on"]
vb.customize ["modifyvm", :id, "--usbehci", "on"]
vb.customize ["modifyvm", :id, "--accelerate3d", "on"]
vb.customize ['usbfilter', 'add', '0', '--target', :id, '--name', 'SmartCard', '--vendorid', '0x096E', '--productid', '0x0007']
vb.customize ["modifyvm", :id, "--memory", "4096"]
vb.customize ["modifyvm", :id, "--vram", "256"]
vb.cpus = 2
vb.gui = true
vb.name = node_name
end
end
when trying to use NFS with Vagrant to sync folders, on my vagrant I see the permissions as user 501 group dialout.
I fixed the issue disabling NFS and specifying a user and group manually in Vagrant file. I would like to use NFS though.
Here is my VagrantFile
$BOX = "ubuntu/xenial64"
$IP = "10.0.0.10"
$MEMORY = ENV.has_key?('VM_MEMORY') ? ENV['VM_MEMORY'] : "1024"
$CPUS = ENV.has_key?('VM_CPUS') ? ENV['VM_CPUS'] : "1"
Vagrant.configure("2") do |config|
config.vm.hostname = "name.dev"
config.vm.box = $BOX
config.vm.network :private_network, ip: $IP
config.ssh.forward_agent = true
config.vm.synced_folder ".", "/var/www/name/current", type: "nfs"
config.vm.provider "virtualbox" do |v|
v.name = "name
v.customize ["modifyvm", :id, "--cpuexecutioncap", "100"]
v.customize ["modifyvm", :id, "--memory", $MEMORY]
v.customize ["modifyvm", :id, "--cpus", $CPUS]
end
end
I've tried nfsbind but it seems that this require absolute path which I would rather avoid.
Any tips?
Thanks
I have created a service on some pods in Kubernetes. I'm able to curl the service-ip:port and I see some HTML.
I want to access the service in my browser on my own PC.
What do I have to edit in my Vagrantfile to map my vagrant internal IP on my localhost (of PC)?
This is a part of my vagrantfile (I think the part where I have to make edits)
# Finally, fall back to VirtualBox
config.vm.provider :virtualbox do |v, override|
setvmboxandurl(override, :virtualbox)
v.memory = vm_mem # v.customize ["modifyvm", :id, "--memory", vm_mem]
v.cpus = $vm_cpus # v.customize ["modifyvm", :id, "--cpus", $vm_cpus]
# Use faster paravirtualized networking
v.customize ["modifyvm", :id, "--nictype1", "virtio"]
v.customize ["modifyvm", :id, "--nictype2", "virtio"]
end
end
# Kubernetes master
config.vm.define "master" do |c|
customize_vm c, $vm_master_mem
if ENV['KUBE_TEMP'] then
script = "#{ENV['KUBE_TEMP']}/master-start.sh"
c.vm.provision "shell", run: "always", path: script
end
c.vm.network "private_network", ip: "#{$master_ip}"
end
# Kubernetes node
$num_node.times do |n|
node_vm_name = "node-#{n+1}"
node_prefix = ENV['INSTANCE_PREFIX'] || 'kubernetes' # must mirror default in cluster/vagrant/config-default.sh
node_hostname = "#{node_prefix}-#{node_vm_name}"
config.vm.define node_vm_name do |node|
customize_vm node, $vm_node_mem
node_ip = $node_ips[n]
if ENV['KUBE_TEMP'] then
script = "#{ENV['KUBE_TEMP']}/node-start-#{n}.sh"
node.vm.provision "shell", run: "always", path: script
end
node.vm.network "private_network", ip: "#{node_ip}"
end
end
I tried to change node.vm.network "private_network", ip: "#{node_ip}" in node.vm.network "private_network", ip: "192.xx.xx.xx"but I'm not able to reload my vagrant:
/opt/vagrant/embedded/lib/ruby/2.2.0/ipaddr.rb:559:in `in6_addr': invalid address (IPAddr::InvalidAddressError)
Your service needs to be of type NodePort to be reached on the IP of the vagrant VM. For example if your pods are started by a replication controller. Create the services with:
kubectl expose rc foobar --type=NodePort --port=80
This will return a random port. Open your browser on your Vagrant node VM at that port and you will reach your service.