Rollen und Profile

Mit zunehmender Größe der Systemlandschaft wächst auch die Codebasis in Puppet. Sollen nun mehrere Systeme exakt gleich konfiguriert werden, führt dies schnell zu redunantem Code. Craig Dunn hat daher 2012 einige Best Practices zur Abstraktion in Rollen und Profile vorgestellt.

 
puppet_rollen_und_profile_1
 

Ziel dieser Vorgehensweise ist es die Logik auf der Serverebene (Node) zu reduzieren und die Wiederverwendbarkeit zu steigern.

Eine Rolle beschreibt dabei die spätere Funktion / Rolle des Systems (z.B. WordPress Instanz). Hierfür sind bekanntermaßen ein Webserver, eine Datenbank und die WordPress Dateien selbst notwendig.

Diese Bestandteile werden von Profilen abgebildet.

 

puppet_rollen_und_profile_2

 

Auf diese Weise kann z.B. ein Profil Webserver erstellt werden, welches ebenfalls für andere Rollen (z.B. Eigene Applikationen, CMS, Shopsystem) verwendet werden kann. Ein Profil kann sowohl direkte Angaben von Ressourcen als auch andere eingebundene Klassen (z.B. von Puppet Forge) enthalten.

Somit besteht eine Rolle immer aus einem oder mehreren Profilen.

 

Beispiel

Um das Konzept dahinter besser zu verstehen zu können, schauen wir uns die nachfolgende Definition an.

Oder nachfolgend für eine andere z.B. eigene Applikation, die ohne Webserver auskommt.

 

Profile

In den Profilen werden die Module mit Parametern versorgt. Für das Profil Webserver ist es daher ratsam z.B. den Document Root per Parameter im Profil übergeben zu können. Nur auf diese Weise
bleibt das Profil jederzeit leicht wiederverwendbar.

 

Rollenzuweisung

Im Regelfall besitzt ein Serversystem eine Rolle und erfüllt damit einen bestimmten Zweck. Natürlich existieren auch Systeme, die mehrere Funktionen gleichzeitig erfüllen. Auch das ist mit dem Rollen Ansatz möglich. Das folgende Beispiel beschreibt einen Server mit Grundkonfiguration, WordPress, PHPMyAdmin und Drupal.

 

Praxis Beispiel

Nachfolgend nochmal ein direktes Beispiel aus der Praxis. Hierbei handelt es sich um mehrere WordPress Instanzen für Kundenwebseiten. Statt für jeden Server die einzelnen Module bzw. Klassen nochmals zu konfigurieren und mit immer gleichen Parametern zu versorgen, wird diesen einfach die entsprechende Rolle zugeordnet.

 

Weiter: Verwaltung der Server / Nodes