# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
#
VAGRANTFILE_API_VERSION = "2"

# Insert all your Vms with configs
boxes = [
    { :name => :master1,        :role      => 'db',   :ip => '192.168.33.31' }, # master node 1
    { :name => :master2,        :role      => 'db',   :ip => '192.168.33.32' }, # master node 2
    { :name => :loadbalancer,   :role      => 'lb',   :ip => '192.168.33.33' }, # load balancer 1
    { :name => :loadbalancer2,  :role      => 'lb',   :ip => '192.168.33.34' }, # load balancer 2
    { :name => :drbd1,          :role      => 'drbd', :ip => '192.168.33.41' }, # drbd 1
    { :name => :drbd2,          :role      => 'drbd', :ip => '192.168.33.42' }, # drbd 2
]

$install_common = <<INSTALL
aptitude update
DEBIAN_FRONTEND=noninteractive aptitude -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install python-software-properties openntpd
INSTALL

$install = <<INSTALL
aptitude update
DEBIAN_FRONTEND=noninteractive aptitude -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install python-software-properties
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
add-apt-repository 'deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.0/debian wheezy main'
add-apt-repository 'deb http://repo.percona.com/apt wheezy main'
echo 'Package: *
Pin: release o=Percona Development Team
Pin-Priority: 100' > /etc/apt/preferences.d/00percona.pref
aptitude update
DEBIAN_FRONTEND=noninteractive aptitude -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install mariadb-server percona-toolkit
INSTALL

$install_lb = <<INSTALL
add-apt-repository 'deb http://ftp.fr.debian.org/debian/ wheezy-backports main'
aptitude update
DEBIAN_FRONTEND=noninteractive aptitude -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install haproxy tcpdump keepalived
sed -i "s/ENABLED=0/ENABLED=1/" /etc/default/haproxy
echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
INSTALL

$install_drbd = <<INSTALL
aptitude update
DEBIAN_FRONTEND=noninteractive aptitude -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install drbd8-utils parted
echo "drbd" >> /etc/modules
INSTALL

$install_pacemaker = <<INSTALL
aptitude update
DEBIAN_FRONTEND=noninteractive aptitude -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install pacemaker corosync
INSTALL

Vagrant::Config.run do |config|
  # Default box OS
  vm_default = proc do |boxcnf|
    boxcnf.vm.box       = "deimosfr/debian-wheezy"
  end

  boxes.each do |opts|
    vm_default.call(config)
    config.vm.define opts[:name] do |config|
        config.vm.customize ["modifyvm", :id, "--cpus", 2]
        config.vm.network   :bridged, :bridge => "wlan0"
        config.vm.network   :hostonly, opts[:ip]
        config.vm.host_name = "%s.vm" % opts[:name].to_s
        config.vm.provision "shell", inline: $install_common
        # Install HAProxy for load balancer server or
        if opts[:role] == 'lb'
            config.vm.provision "shell", inline: $install_lb
        else
            config.vm.provision "shell", inline: $install
        end
        # Add a second drive for DRBD
        if opts[:role] == 'drbd'
            config.vm.provision "shell", inline: $install_drbd
            config.vm.provision "shell", inline: $install_pacemaker
            file_to_disk = 'drbd-disk_' + opts[:name].to_s + '.vdi'
            config.vm.customize ['createhd', '--filename', file_to_disk, '--size', 4 * 1024]
            config.vm.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_to_disk]
        end

        # Pacemaker
        if opts[:role] == 'pm'
            config.vm.provision "shell", inline: $install
            config.vm.provision "shell", inline: $install_pacemaker
        end
    end
  end
end

