Firmenbrief

19.03.2014

CoreBiz und das Konfigurationstool Puppet


Puppet ist ein in der Programmiersprache Ruby geschriebenes Tool für das automatisierte Konfigurationsmanagement. Durch Puppet ist es einem IT-Administrator möglich, die Konfigurationen für einen oder mehrere Rechner nur an einer Stelle zu ändern: in den Puppet-Manifests. Puppet ist für alle gängigen Betriebssysteme erhältlich.

Wie arbeitet Puppet?

Puppet verwendet einen deklarativen, modellbasierten Ansatz zur IT-Automatisierung. Hierbei durchläuft es folgende vier Zustände:

1. Definition: Durch die Deklarationssprache Puppet wird der gewünschte Zustand der Konfiguration der entsprechenden Infrastruktur definiert.

2. Simulieren: Hier ist es möglich, die Änderungen an der Konfiguration zu testen, bevor sie auf den Zielsystemen angewendet werden. Dieser Zustand wird als Simulieren bezeichnet, da Puppet hier die Umgebung simuliert und darin getestet wird.

3. Anwenden: Puppet setzt die eingestellte Konfiguration automatisch durch und korrigiert jede Konfigurationsabweichung.

4. Bericht: Puppet berichtet alle Unterschiede zwischen Ist- und Sollzuständen und alle Änderungen zur Durchsetzung des gewünschten Zustands.

Um eine Wiederverwendbarkeit der einzelnen Konfigurationen zu gewährleisten, ist Puppet modulbasiert aufgebaut. Das heißt, es können für gewissen Anforderungen Module erstellt und später auch wiederverwendet werden. Wenn beispielsweise ein Webserver konfiguriert werden soll, dann wird ein allgemeines Webservermodul erzeugt und für jeden benötigten Webserver wiederverwendet.

Im Gegensatz zu dem in CoreBiz/RedBiz verwendeten CFEngine2 wird Puppet in der Regel  templatebasiert eingesetzt. Das bedeutet, dass die gewünschten Zustände eines Systems in Templates konfiguriert und diese Templates dann von Puppet verteilt werden. Es gibt jedoch durch ein Puppet-Modul, Augeas genannt, die Möglichkeit Konfigurationsdateien direkt zu editieren.

Puppet Augeas

Das Augeas-Modul ist seit Puppet Version 0.24.7 verfügbar und behandelt Konfigurationsdateien als Bäume von Werten. Wenn man etwas in einer Datei ändern will, lädt man über augeas den Wertebaum oder Bereiche des Wertebaumes, verändert die gewünschten Werte und schreibt den Baum wieder zurück in die Datei.

So kann z. B. die PermitRootLogin Einstellung der Datei sshd_config wie folgt referenziert werden:

\$ augtool print /files/etc/ssh/sshd_config/PermitRootLogin
/files/etc/ssh/sshd_config/PermitRootLogin = "yes"

Verändert werden kann der Wert nun über:

\$ augtool set /files/etc/ssh/sshd_config/PermitRootLogin no

Die beiden Beispiele zuvor sind von der Shell abgesetzt. In Puppet benötigt man für die obige Änderung im Grunde genau die selben Befehle:

augeas  "configure_sshd":
context => "/files/etc/ssh/sshd_config",
changes =>  "set PermitRootLogin yes",

 

Test Driven Development mit Puppet

Wenn man an ein Konfigurationsmanagement denkt, dann bringt man das im ersten Moment nicht mit Test Driven Development in Verbindung. Durch eine Kombination von Puppet Modulen wie rspec-puppet, puppet-lint und rspec-puppet-augeas ist es dennoch möglich Test Driven Development anzuwenden. Die Module in Kürze:

- rspec-puppet
rspec selbst ist ein Testing Tool für die Programmiersprache Ruby. Es wurde für Ruby für Test Driven Development entwickelt. rspec-puppet ist demzufolge ein Testing Tool für Puppet auf der Basis des Ruby rspec Tools.

- puppet-lint
Das ist ein Tool um Puppet-Dateien entsprechend dem Styleguide zu überprüfen.

- rspec-puppet-augeas
rspec-puppet-augeas ermöglicht es, augeas-Bereiche der Puppet-Dateien in rspec-Tests zu testen.

In Puppet ist es recht einfach möglich Test Driven Development durchzuführen, auch weil Puppet die Umgebung der Zielmaschine simuliert.

Puppet und CoreBiz/RedBiz

Sicher ist, dass das in die Jahre gekommene und inzwischen durch Version 3 ersetzte CFEngine2 in CoreBiz/RedBiz mittelfristig abgelöst wird. Mit welchen Tools und in welchem Umfang das passieren wird, steht noch in den Sternen. Von den LIS-Technikern ist jedoch zu erfahren, dass es bereits Experimente mit Puppet für die nächste CoreBiz und RedBiz Version gibt.