Basics

Alle Puppet Module folgenden einem deklarativen Syntax. Zusätzlich ist eine bestimmte Dateistruktur für Module vorgegeben.

Grundsätzlich befinden sich alle Module im Ordner /etc/puppet/environments/production/modules. Dabei besitzt jedes Modul eine gewisse Unterstruktur.
 

 

Das kleinste Modul besteht also aus dem Ordner mit dem Klassennamen, dem Unterverzeichnis manifests/ und der Datei init.pp, welche für die Klassen- / Moduldefinition vorgesehen ist.

In größeren Modulen können im Verzeichnis files/ zusätzlich statische (= unveränderliche) Konfigurationsdateien abgelegt werden.

Das Verzeichnis templates/ ermöglicht die Ablage von Konfigurationsdatei-Vorlagen (Endung .erb). In diesen können Variablen gesetzt und die gewünschte Konfigurationsdatei somit beliebig angepasst werden.

Um eine Grundstruktur anzulegen kann der nachfolgende Befehl benutzt werden.

 

Klassendefinition / init.pp

Im Folgenden schauen wir uns die initiale Klassenkonfiguration anhand mehrere Beispiele etwas näher an.

Pakete verwalten

Dieses minimale Modul installiert das Paket apache2. Hier erkennt man auch sehr schön die Funktionsweise von Puppet. Es wird der gewünschte Systemstand definiert (installed). Um die distributionsspezifische Umsetzung wie z.B. die Installation mittels apt-get oder yum kümmert sich Puppet.

apache2 ist dabei der sogenannte Ressourcenname. Da der Parameter name nicht angegeben ist, nimmt Puppet den Ressourcennamen als Paketnamen des zu installierenden Paketes. Daher wäre auch folgende Möglichkeit funktional.

 

Neben dem Typ package existieren noch weitere Standardtypen. Die gängigsten sind:

 

  • cron – Management von Cronjobs
  • exec – Ausführen von Befehlen
  • user – Management von Benutern
  • group – Management von Gruppen
  • mount – Mounten von Geräten / Shares
  • service – Management von Systemdiensten
  • ssh_authorized_key – Verwaltung von SSH Keys

 

Eine komplette Übersicht findet sich in der offiziellen Dokumentation.

 

Pakete und Dienste verwalten

Die nachfolgende Definition installiert den Apache Webserver und stellt sicher, dass der Apache Dienst gestartet ist (ensure => running) und beim Systemstart gestartet (enable => true) wird.

 

Pakete / Dienste und Konfigurationsdateien

Nun gehen wir einen Schritt weiter und geben unserem Apache Modul noch eine Konfigurationsdatei mit. Zunächst pflegen wir diese als statische Datei im Verzeichnis files/ ein.

Voraussetzung für die Funktionalität ist, dass die httpd.conf angelegt und mit einem funktionalen Inhalt gefüllt ist.

Über require haben wir nun eine Abhängigkeit definiert: Die Konfigurationsdatei kann erst angelegt werden, wenn das Paket apache2 installiert wurde. Hierzu aber später mehr.

Die Option path gibt an unter welchem Pfad die Konfigurationsdatei angelegt bzw. aktualisiert werden soll (auf dem Remotesystem). Der Ordner files/ muss hierbei nicht angegeben werden.

Über source geben wir die Quelle der statischen Konfigurationsdatei auf unserem Puppet Master an. Die Abfrage läuft dann automatisch über den in Puppet integrierten Fileserver.

 

Puppet Forge

Auf diese Weise könnte man nun für jede erdenkliche Funktion ein passendes Modul schreiben. Um den Arbeitsaufwand hierfür drastisch zu reduzieren, existiert die Puppet Forge. Dies ist ein freier Marktplatz für alle Arten von Modulen.

Hier finden sich fertige Module für z.B. MySQL, IPTables, Apache, HAProxy, Nginx, NTP, etc. Diese lassen sich später auch ganz bequem in Profile (z.B. profile::ntp) integrieren.

In der Regel existiert zu jedem Forge Modul auch eine ausführliche Dokumentation über die Verwendung + Parameter. Gängige Module werden auch offiziell vom Hersteller Puppet Labs unterstützt und gepflegt.

Weiter: Abhängigkeiten