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 🙂