diff options
| author | Martin André <m.andre@redhat.com> | 2015-09-14 23:07:46 +0900 |
|---|---|---|
| committer | Martin André <m.andre@redhat.com> | 2015-09-15 14:57:19 +0900 |
| commit | b6a4469fbee8aef10bb6c65b107900569db4b45d (patch) | |
| tree | 08983157101282edaf6c6a6d91a89a96975beba8 | |
| parent | 36a56758975e6145eab87300f5e42d7fbfeaf89a (diff) | |
| download | kolla-b6a4469fbee8aef10bb6c65b107900569db4b45d.tar.gz kolla-b6a4469fbee8aef10bb6c65b107900569db4b45d.zip | |
Libvirt provider for Vagrant
Change default box to centos/7 since it is available for both
Virtualbox and libvirt providers.
Default provider is now libvirt.
I had to disable DHCP on the private netword due to issues with
vagrant-libvirt: https://github.com/pradels/vagrant-libvirt/issues/427.
Partially-Implements: blueprint vagrant-improvements
Closes-Bug: #1482478
Change-Id: Iaa1e42d8c0b4c108c5dd74fba8e71d948b7a9567
| -rw-r--r-- | vagrant/Vagrantfile | 73 |
1 files changed, 46 insertions, 27 deletions
diff --git a/vagrant/Vagrantfile b/vagrant/Vagrantfile index 496e2d992..129badd35 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 |
