Configure Vagrant VMs using Ansible.

This way, Vagrant VMs and cloud-provided VMs are configured in the exact same way, hence avoiding configuration drift and subtle bugs associated to different versions of software.
This commit is contained in:
Marc CARRE committed 2017-02-08 14:15:59 +00:00
1 parent e5185e73ce
commit 67dbdd377c
3 files changed
+53 -112

No files matched your search

+42 -35
View File
@@ -3,55 +3,62 @@
Vagrant.require_version ">= 1.7.0"
# these ought to match what is in config.sh
n_machines = 3
ip_prefix = "192.168.48"
ip_suffix_base = 10
N_MACHINES = 3
IP_PREFIX = '192.168.48'
IP_SUFFIX_BASE = 10
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'vagrant-common.rb'))
def configure_docker(host, hostname, ip)
pkgs = %w(docker-engine ethtool)
host.vm.box = VAGRANT_IMAGE
host.vm.provision :shell, :inline => "hostnamectl set-hostname "+hostname
host.vm.network "private_network", ip: ip
# Disable default Vagrant shared folder, which we don't need:
host.vm.synced_folder ".", "/vagrant", disabled: true
host.vm.provision :shell, :inline => "sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D"
host.vm.provision :shell, :inline => "echo deb https://apt.dockerproject.org/repo ubuntu-wily main > /etc/apt/sources.list.d/docker.list"
install_packages host.vm, pkgs
tweak_docker_daemon host.vm
cleanup host.vm
def ip_address(i)
"#{IP_PREFIX}.#{IP_SUFFIX_BASE + i}"
end
def configure_resolv_conf(host)
# Fix the resolution errors by using 8.8.8.8
host.vm.provision :shell, :inline => "echo 'nameserver 8.8.8.8' > /etc/resolv.conf"
def hostname(i)
"host#{i}"
end
ETC_HOSTS_ENTRIES = (1..N_MACHINES).map { |i| "#{ip_address(i)} #{hostname(i)}\n"}.join('')
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
(1..N_MACHINES).each do |i|
hostname = hostname(i)
config.vm.define hostname do |host|
host.vm.provider :virtualbox do |vb|
vb.name = hostname
vb.memory = 384
configure_nat_dns(vb)
end
config.vm.provider :virtualbox do |vb|
vb.memory = 384
configure_nat_dns(vb)
end
# Disable Vagrant 1.7 per host insecure key replacement
host.ssh.insert_key = false
# Disable Vagrant 1.7 per host insecure key replacement
config.ssh.insert_key = false
host.vm.box = VAGRANT_IMAGE
host.vm.network "private_network", ip: ip_address(i)
host.vm.hostname = hostname
(1..n_machines).each do |i|
config.vm.define "host#{i}" do |host|
ip_suffix = ip_suffix_base + i
configure_resolv_conf(host)
configure_docker(host, "host#{i}", "#{ip_prefix}.#{ip_suffix}")
host.vm.provision :shell, :inline => <<END
# Tests rely on hostnames, so we remove potentially incorrect entries (e.g. localhost), and add mappings of IP addresses to hostnames:
sed -i '/#{hostname}/d' /etc/hosts
echo "#{ETC_HOSTS_ENTRIES}" >> /etc/hosts
# Fix the resolution errors by using 8.8.8.8
echo 'nameserver 8.8.8.8' > /etc/resolv.conf
END
# Disable default Vagrant shared folder, which we don't need:
host.vm.synced_folder ".", "/vagrant", disabled: true
cleanup host.vm
# Only execute once the Ansible provisioner, when all the machines are up and ready:
if i == N_MACHINES
host.vm.provision 'ansible' do |ansible|
ansible.limit = 'all' # Disable default limit to connect to all the machines
ansible.playbook = '../tools/config_management/setup_weave-net_test.yml'
end
end
end
end
end
begin