Vagrant Multi Instance Setup für Icinga 2 Cluster

Nachdem sich Vagrant bestens für Entwicklungs- und Testumgebungen eignet, ist es auch als Basis für Demo VMs ein sehr praktisches Tool (neben dem obligatorischen Provisioning durch z.B. Puppet). Neben den bestehenden Icinga 2 und Icinga Web 2 Vagrant Boxen stellt sich aber mitunter die Anforderung, mehrere Vagrant Boxen in einem Projekt zu bedienen – beispielsweise zwei Icinga 2 Instanzen, die mittels Icinga 2 Cluster Feature miteinander kommunizieren.
Kurz umrissen die Anforderungen

  • 2 Instanzen mit Hostnamen icinga2a, icinga2b
  • Clusterkommunikation in privatem Netzwerk 192.168.33.0
  • HTTP Portforwarding auf localhost Port 8080 bzw 8081
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  servers = { 'icinga2a' => '192.168.33.10',
              'icinga2b' => '192.168.33.20'
            }
  http_port = { 'icinga2a' => 8080,
                'icinga2b' => 8081
              }
  servers.each do |server_name, server_ip|
    config.vm.define server_name do |app_config|
      app_config.vm.box = "centos-6.5-i386-vbox"
      app_config.vm.box_url = "http://boxes.icinga.org/centos-65-i386-vbox.box"
      app_config.vm.hostname = "#{server_name.to_s}"
      app_config.vm.network :forwarded_port, guest: 80, host: http_port[server_name], auto_correct: true
      app_config.vm.network :private_network, ip: "#{server_ip}"
      app_config.vm.provider "virtualbox" do |vb|
        vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate//vagrant/config", "1"]
      end
      app_config.vm.provision :puppet do |puppet|
        puppet.module_path = ".vagrant-puppet/modules"
        puppet.manifests_path = ".vagrant-puppet/manifests"
        #puppet.options = "--verbose --debug"
      end
      app_config.vm.provision :shell, :path => ".vagrant-puppet/manifests/finalize.sh"
    end
  end
end

Die Verteilung der Icinga 2 Clusterkonfiguration sowie generell die Installation von Icinga 2 und Icinga Web 2 findet dann im Puppet Provisioner statt. Details zur Icinga 2 Clusterkonfiguration gibts in der Icinga Dokumentation sowie bei uns  im Webinar Archiv. Wir installieren auch gerne eine Testumgebung und helfen bei der Migration von Icinga 1.x auf Icinga 2.
Wie baut man die zugehörigen Puppetmodule? Dazu gibts Beispiele im Icinga Git sowie wir auch Puppet Schulungen für Wissbegierige im Portfolio haben.
Ein kurzes Beispiel anhand einer vorbereiteten Konfiguration:

file { '/etc/icinga2/cluster':
  owner   => icinga,
  group   => icinga,
  ensure  => 'directory',
  require => Package['icinga2']
}
file { "/etc/icinga2/cluster/$hostname.conf":
  owner   => icinga,
  group   => icinga,
  source  => "puppet:////vagrant/.vagrant-puppet/files/etc/icinga2/cluster/$hostname.conf",
  require => File['/etc/icinga2/cluster']
}

Cebit Blog
Dieses Vagrant Setup habe ich für das Icinga 2 Webinar gestern verwendet, welches dann auch auf der CeBit nächste Woche vor Ort bei uns am Stand in Halle 6, Stand E16, (310) besichtigt werden kann – vorbeikommen lohnt sich auf jeden Fall!
Und wer sich nun fragt, wieso Entwickler nicht nur magischen Code fabrizieren, sondern auch mit genialen Tools arbeiten dürfen, dem sei ans Herz gelegt – komm zu uns! Wir suchen immer motivierte, entdeckungsfreudige Kollegen 🙂

Michael Friedrich
Michael Friedrich
Senior Developer

Michael ist seit vielen Jahren Icinga-Entwickler und hat sich Ende 2012 in das Abenteuer NETWAYS gewagt. Ein Umzug von Wien nach Nürnberg mit der Vorliebe, österreichische Köstlichkeiten zu importieren - so mancher Kollege verzweifelt an den süchtig machenden Dragee-Keksi und der Linzer Torte. Oder schlicht am österreichischen Dialekt der gerne mit Thomas im Büro intensiviert wird ("Jo eh."). Wenn sich Michael mal nicht in der Community helfend meldet, arbeitet er am nächsten LEGO-Projekt oder geniesst...