diff --git a/vagrant/Vagrantfile b/vagrant/Vagrantfile index 496e2d992a318fbb93df91c774ad0afe06a55c8b..129badd35b841d36bfc0ea2450a58c69246545db 100644 --- a/vagrant/Vagrantfile +++ b/vagrant/Vagrantfile @@ -1,6 +1,14 @@ # -*- mode: ruby -*- # vi: set ft=ruby : +require "ipaddr" + +# The base image to use +BASE_IMAGE="centos/7" + +# Either libvirt or virtualbox +PROVIDER="libvirt" + # Whether to do Multi-node or All-in-One deployment MULTINODE=true @@ -10,24 +18,40 @@ NUMBER_OF_COMPUTE_NODES=1 NUMBER_OF_STORAGE_NODES=1 NUMBER_OF_NETWORK_NODES=1 +# Private IP address network +# Sadly, DHCP assignment on private network is buggy with libvirt provider +# see https://github.com/pradels/vagrant-libvirt/issues/427 +PRIVATE_NETWORK="10.10.10.0/24" + +# Bridge interface +BRIDGE_INTERFACE="virbr0" + # Configure a new SSH key and config so the operator is able to connect with # the other cluster nodes. unless File.file?("./vagrantkey") system("ssh-keygen -f ./vagrantkey -N '' -C this-is-vagrant") end +# A poor's man DHCP server +# Note: this prevents safely running 'vagrant up' one VM at a time otherwise +# you're likely to have IP address conflicts. The shuffle is meant to reduce +# collisions. A safer way would be to make sure the host doesn't respond to +# pings. +# This should all go away once we find a way to make vagrant-libvirt work with +# private DHCP networks. +def pick_address + @available_addresses ||= IPAddr.new(PRIVATE_NETWORK).to_range.to_a.drop(2).shuffle + @available_addresses.shift.to_s +end + Vagrant.configure(2) do |config| - # The base image to use - # TODO (harmw): something more close to vanilla would be nice, someday. - config.vm.box = "puppetlabs/centos-7.0-64-puppet" + config.vm.box = BASE_IMAGE # Next to the hostonly NAT-network there is a host-only network with all # nodes attached. Plus, each node receives a 3rd adapter connected to the # outside public network. - # TODO (harmw): see if there is a way to automate the selection of the bridge - # interface. - config.vm.network "private_network", type: "dhcp" - config.vm.network "public_network", ip: "0.0.0.0", bridge: "wlp3s0b1" + config.vm.network "private_network", ip: pick_address + config.vm.network "public_network", dev: BRIDGE_INTERFACE, mode: 'bridge', type: 'bridge' my_privatekey = File.read(File.join(File.dirname(__FILE__), "vagrantkey")) my_publickey = File.read(File.join(File.dirname(__FILE__), "vagrantkey.pub")) @@ -47,11 +71,6 @@ Vagrant.configure(2) do |config| EOS config.hostmanager.enabled = true - config.hostmanager.ip_resolver = proc do |vm, resolving_vm| - if vm.id - `VBoxManage guestproperty get #{vm.id} "/VirtualBox/GuestInfo/Net/1/V4/IP"`.split()[1] - end - end # The operator controls the deployment config.vm.define "operator" do |admin| @@ -59,9 +78,9 @@ Vagrant.configure(2) do |config| admin.vm.provision :shell, path: "bootstrap.sh", args: "operator #{MULTINODE ? 'multinode' : 'aio'}" admin.vm.synced_folder "storage/operator/", "/data/host", create:"True" admin.vm.synced_folder "storage/shared/", "/data/shared", create:"True" - admin.vm.synced_folder ".", "/vagrant", disabled: true - admin.vm.provider "virtualbox" do |vb| - vb.memory = MULTINODE ? 1024 : 4096 + admin.vm.synced_folder ".", "/home/vagrant/sync", disabled: true + admin.vm.provider PROVIDER do |vm| + vm.memory = MULTINODE ? 1024 : 4096 end admin.hostmanager.aliases = "operator" end @@ -74,9 +93,9 @@ Vagrant.configure(2) do |config| compute.vm.provision :shell, path: "bootstrap.sh" compute.vm.synced_folder "storage/compute/", "/data/host", create:"True" compute.vm.synced_folder "storage/shared/", "/data/shared", create:"True" - compute.vm.synced_folder ".", "/vagrant", disabled: true - compute.vm.provider "virtualbox" do |vb| - vb.memory = 1024 + compute.vm.synced_folder ".", "/home/vagrant/sync", disabled: true + compute.vm.provider PROVIDER do |vm| + vm.memory = 1024 end compute.hostmanager.aliases = "compute0#{i}" end @@ -89,9 +108,9 @@ Vagrant.configure(2) do |config| storage.vm.provision :shell, path: "bootstrap.sh" storage.vm.synced_folder "storage/storage/", "/data/host", create:"True" storage.vm.synced_folder "storage/shared/", "/data/shared", create:"True" - storage.vm.synced_folder ".", "/vagrant", disabled: true - storage.vm.provider "virtualbox" do |vb| - vb.memory = 1024 + storage.vm.synced_folder ".", "/home/vagrant/sync", disabled: true + storage.vm.provider PROVIDER do |vm| + vm.memory = 1024 end storage.hostmanager.aliases = "storage0#{i}" end @@ -104,9 +123,9 @@ Vagrant.configure(2) do |config| network.vm.provision :shell, path: "bootstrap.sh" network.vm.synced_folder "storage/network/", "/data/host", create:"True" network.vm.synced_folder "storage/shared/", "/data/shared", create:"True" - network.vm.synced_folder ".", "/vagrant", disabled: true - network.vm.provider "virtualbox" do |vb| - vb.memory = 1024 + network.vm.synced_folder ".", "/home/vagrant/sync", disabled: true + network.vm.provider PROVIDER do |vm| + vm.memory = 1024 end network.hostmanager.aliases = "network0#{i}" end @@ -119,9 +138,9 @@ Vagrant.configure(2) do |config| control.vm.provision :shell, path: "bootstrap.sh" control.vm.synced_folder "storage/control/", "/data/host", create:"True" control.vm.synced_folder "storage/shared/", "/data/shared", create:"True" - control.vm.synced_folder ".", "/vagrant", disabled: true - control.vm.provider "virtualbox" do |vb| - vb.memory = 2048 + control.vm.synced_folder ".", "/home/vagrant/sync", disabled: true + control.vm.provider PROVIDER do |vm| + vm.memory = 2048 end control.hostmanager.aliases = "control0#{i}" end