You might be running VMware on your laptop, but your coworker might not. Alternatively, you want people to have the choice, or you simply want both environments to work! We'll see how to build a single Vagrantfile to support them all.
To step through this recipe, you will need the following:
A working Vagrant installation
A working VirtualBox installation
A working VMware Workstation (PC) or Fusion (Mac) installation
A working Vagrant VMware plugin installation
An internet connection
The Vagrantfile from the previous recipe using a bento/centos72 box
Some Vagrant boxes are available for multiple hypervisors, such as the CentOS 7 Bento box we previously used. This way, we can simply choose which one to use.
Let's start with our previous Vagrantfile including customizations for VMware:
Vagrant.configure("2") do |config| config.vm.box = "bento/centos-7.2" ["vmware_fusion", "vmware_workstation"].each do |vmware| config.vm.provider vmware do |v| v.vmx["numvcpus"] = "2" v.vmx["memsize"] = "1024" end end end
How would we add the same configuration on VirtualBox as we have on VMware? Here's how to customize VirtualBox similarly in the Vagrantfile:
config.vm.provider :virtualbox do |vb| vb.memory = "1024" vb.cpus = "2" end
Add this to your current Vagrantfile, reload and you'll get the requested resources from your hypervisor, be it VMware or VirtualBox.
It's nice, but we're still repeating ourselves with the values, leading to possible errors, omissions, or mistakes in the future. Let's take advantage once again of the Ruby nature of our Vagrantfile and declare some meaningful variables at the top of our file:
vm_memory = 1024 vm_cpus = 2
Now replace the four values by their variable names and you're done: you're centrally managing characteristics of the Vagrant environment you're using and distributing, whatever hypervisor you're using.