open-nomad/Vagrantfile
Tim Gross e261af9d0c
tools: update virtualbox networking configuration (#11561)
As of VirtualBox 6.1.28, host-only networks are restricted to
`192.168.56.0/21` by default, so spinning up the Vagrant boxes with
secondary networks fail with an error `E_ACCESSDENIED`.

Update the IP configuration of the Vagrant boxes to fall within the
allowed range so that we don't need to ask developers from the
community to make VirtualBox configuration updates outside of their
normal Vagrant use.
2021-11-24 10:45:58 -05:00

204 lines
5.4 KiB
Ruby

# -*- mode: ruby -*-
# vi: set ft=ruby :
#
LINUX_BASE_BOX = "bento/ubuntu-18.04"
FREEBSD_BASE_BOX = "freebsd/FreeBSD-11.3-STABLE"
LINUX_IP_ADDRESS = "192.168.56.200"
Vagrant.configure(2) do |config|
# Compilation and development boxes
config.vm.define "linux", autostart: true, primary: true do |vmCfg|
vmCfg.vm.box = LINUX_BASE_BOX
vmCfg.vm.hostname = "linux"
vmCfg = configureProviders vmCfg,
cpus: suggestedCPUCores()
vmCfg = configureLinuxProvisioners(vmCfg)
# Expose Nomad and Consul ports for ease.
vmCfg.vm.network :forwarded_port, guest: 4646, host: 4646, auto_correct: true, host_ip: "127.0.0.1"
vmCfg.vm.network :forwarded_port, guest: 8500, host: 8500, auto_correct: true, host_ip: "127.0.0.1"
vmCfg.vm.synced_folder '.',
'/opt/gopath/src/github.com/hashicorp/nomad'
vmCfg.vm.provision "shell",
privileged: false,
path: './scripts/vagrant-linux-unpriv-bootstrap.sh'
vmCfg.vm.provider "virtualbox" do |_|
vmCfg.vm.network :private_network, ip: LINUX_IP_ADDRESS
end
end
config.vm.define "linux-ui", autostart: false, primary: false do |vmCfg|
vmCfg.vm.box = LINUX_BASE_BOX
vmCfg.vm.hostname = "linux"
vmCfg = configureProviders vmCfg,
cpus: suggestedCPUCores()
vmCfg = configureLinuxProvisioners(vmCfg)
vmCfg.vm.synced_folder '.',
'/opt/gopath/src/github.com/hashicorp/nomad'
vmCfg.vm.provision "shell",
privileged: false,
path: './scripts/vagrant-linux-unpriv-bootstrap.sh'
# Expose the nomad api and ui to the host
vmCfg.vm.network :forwarded_port, guest: 4646, host: 4646, auto_correct: true
vmCfg.vm.network :forwarded_port, guest: 8500, host: 8500, auto_correct: true
# Expose Ember ports to the host (one for the site, one for livereload)
vmCfg.vm.network :forwarded_port, guest: 4201, host: 4201, auto_correct: true
vmCfg.vm.network :forwarded_port, guest: 49153, host: 49153, auto_correct: true
end
config.vm.define "freebsd", autostart: false, primary: false do |vmCfg|
vmCfg.vm.box = FREEBSD_BASE_BOX
vmCfg.vm.hostname = "freebsd"
vmCfg.ssh.shell = "sh"
vmCfg = configureProviders vmCfg,
cpus: suggestedCPUCores()
vmCfg.vm.network "private_network", type: "dhcp"
vmCfg.vm.synced_folder '.',
'/opt/gopath/src/github.com/hashicorp/nomad',
type: "nfs",
bsd__nfs_options: ['noatime']
vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-freebsd-priv-config.sh'
vmCfg.vm.provision "shell",
privileged: false,
path: './scripts/vagrant-freebsd-unpriv-bootstrap.sh'
end
# Test Cluster (Linux)
1.upto(3) do |n|
serverName = "nomad-server%02d" % [n]
clientName = "nomad-client%02d" % [n]
serverIP = "192.168.56.%d" % [10 + n]
clientIP = "192.168.56.%d" % [20 + n]
config.vm.define serverName, autostart: false, primary: false do |vmCfg|
vmCfg.vm.box = LINUX_BASE_BOX
vmCfg.vm.hostname = serverName
vmCfg = configureProviders(vmCfg)
vmCfg = configureLinuxProvisioners(vmCfg)
vmCfg.vm.provider "virtualbox" do |_|
vmCfg.vm.network :private_network, ip: serverIP
end
vmCfg.vm.synced_folder '.',
'/opt/gopath/src/github.com/hashicorp/nomad'
vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-linux-priv-zeroconf.sh'
end
config.vm.define clientName, autostart: false, primary: false do |vmCfg|
vmCfg.vm.box = LINUX_BASE_BOX
vmCfg.vm.hostname = clientName
vmCfg = configureProviders(vmCfg)
vmCfg = configureLinuxProvisioners(vmCfg)
vmCfg.vm.provider "virtualbox" do |_|
vmCfg.vm.network :private_network, ip: clientIP
end
vmCfg.vm.synced_folder '.',
'/opt/gopath/src/github.com/hashicorp/nomad'
vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-linux-priv-zeroconf.sh'
end
end
end
def configureLinuxProvisioners(vmCfg)
vmCfg.vm.provision "shell",
privileged: true,
inline: 'rm -f /home/vagrant/linux.iso'
vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-linux-priv-go.sh'
vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-linux-priv-config.sh'
vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-linux-priv-dev.sh'
vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-linux-priv-docker.sh'
vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-linux-priv-consul.sh'
vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-linux-priv-cni.sh'
vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-linux-priv-vault.sh'
vmCfg.vm.provision "shell",
privileged: false,
path: './scripts/vagrant-linux-unpriv-ui.sh'
vmCfg.vm.provision "shell",
privileged: true,
path: './scripts/vagrant-linux-priv-buf.sh'
return vmCfg
end
def configureProviders(vmCfg, cpus: "2", memory: "2048")
vmCfg.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--cableconnected1", "on"]
v.memory = memory
v.cpus = cpus
end
["vmware_fusion", "vmware_workstation"].each do |p|
vmCfg.vm.provider p do |v|
v.enable_vmrun_ip_lookup = false
v.vmx["memsize"] = memory
v.vmx["numvcpus"] = cpus
end
end
vmCfg.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--cableconnected1", "on", "--audio", "none"]
v.memory = memory
v.cpus = cpus
end
return vmCfg
end
def suggestedCPUCores()
case RbConfig::CONFIG['host_os']
when /darwin/
Integer(`sysctl -n hw.ncpu`) / 2
when /linux/
Integer(`grep -c ^processor /proc/cpuinfo`) / 2
else
2
end
end