Heute schreibe ich mal einen Beitrag über Puppet. Puppet? Was ist das? Und warum in der Kategorie Entwicklung? .. werden sich nun einige Fragen.
Für all die jenigen, die Puppet schon kennen, und auch Docker schon kennen, die können die beiden folgenden Abschnitte überspringen. Alle anderen Interessierten, erkläre ich kurz einmal was das ist, und was man damit machen kann.
Puppet
Puppet ist ein System für das automatisierte verwalten von Konfigurationen (Software Configuration Management auch SCM). Das bedeutet, mit dieser Software kann man auf PCs Software installieren, Programme ausführen, oder z.B. auch einen neuen Benutzer anlegen. Der Ablauf ist im wesentlichen, das man in einer Konfigurationsdatei im Yaml-Format seine Zielvorstellungen von seiner Umgebung beschreibt, und diese dann vom System umgesetzt wird. Hier mal ein Auszug aus einer Konfigurationsdatei:
PC0815.yaml
Software:
64TeleGramm:
id: '64Gram.64Gram'
version: 'latest'
Man gibt also an, das die Software 64TeleGramm (eine alternative zum Telegram-Client) immer in der Version "latest" vorliegen soll. Ist die Software also nicht installiert, dann wird Sie in der neusten Version installiert, ist Sie schon auf dem PC, dann wird Sie aktualisiert, sofern erforderlich.
Im Hintergrund sorgen sogenannte Manifeste (das sind z.B.: die detailierteren Anweisungen zur Installation) und Module (rüsten Puppet mit Fähigkeiten nach) für den Ablauf.
Ganz klar ist Puppet ein DevOps Thema, das heißt auf der einen Seite gibt es Entwickler, welche neue Fähigkeiten nachrüsten, auf der anderen Seite Admins, die dieses flexible System dazu verwenden, vielleicht tausende Maschinen im Griff zu behalten. Wie man nun Puppet im einzelnen bedient würde hier den Rahmen sprengen, aber vielleicht mache ich ja mal hierzu einen Artikel/Artikelserie?
Selbstverständlich funktioniert Puppet auch ganz gut im privaten Bereich, dazu gilt es aber zu beachten, das Die Serverkomponente nur auch einem Linux-PC läuft, während der Client Windows, Linux oder auch MacOS sein kann. Und bei dieser Serverfrage und Windows, kommt dann Docker ins Spiel. Die Firma unterscheidet zudem noch zwischen einer "bequemen" kostenpflichtigen Enterprise-Variante, und einer kostenlosen Community-Variante.
Docker
Dieses Tool ist vereinfacht gesagt ein Emulator, welcher aber ganz tief im System eingreift. Die Entwickler von Docker sprechen davon das Ihr Tool kein Emulator darstellt. Und es stimmt, Docker ist um ein vielfaches ressourcenärmer und auch schneller als das ein Emulator vermögen würde. Die technischen Details lasse ich hier mal außen vor. Docker ist ebenfalls sehr DevOps affin, da hier ebenfalls ein sogenanntes Dockerrezept erstellt wird. Aber das Konzept geht weiter: Da es ja nicht nur emuliert, bzw. ein ganzes System abgeschottet laufen lassen kann, wie eine virtuelle Maschine, kann man die Idee noch weiterdenken. Es werden einzelne Programme in diese Container gepackt, und diese dann miteinander wie Bausteine verbunden. Dies wird durch das Tool Docker Compose erreicht. Wie das dann genau aussieht sehr Ihr im nachfolgenden Kapitiel.
Puppetserver Community unter Windows mit Docker Compose.
Ich dachte in Zeiten von Docker sollte es doch kein Problem sein eine passende Compose-Datei für mein Vorhaben zu finden: Ich habe aber alles abgesucht. Entweder kam mir die Vorgehensweise zu kompliziert vor, oder das System lief gar nicht unter Windows, oder es lief mal, aber ist so veraltet, das es heute nicht mehr läuft (veraltete Versionen und Vorgehensweisen in der Compose-Datei). Selbst ChatGPT kann solch eine Datei generieren, aber irgendwie wurde die Datenbank nicht richtig angebunden. Ich muss ehrlich zugeben, das ich zwar einiges an Linux-Erfahrung habe, aber mein Wissen in diesem Bereich doch irgendwo Grenzen kennt :-)
Kurz um: In irgendwelchen kryptischen Fehlermeldungen gefangen, musste ich ausgeben.
Ich bin dann nochmal zurückgerudert zur offiziell unterstützten Variante wie man den Puppetserver in Docker betreibt:
Man stößt auf diesem Artikel: https://www.puppet.com/blog/puppet-docker welcher etwas angestaubt ist, und auf https://github.com/puppetlabs-toy-chest/puppet-in-docker-examples verweist. Dieses Repo ist aber veraltet, wie man der readme entnehmen kann, und verweist wiederum auf das aktuelle: https://github.com/puppetlabs/pupperware
Wer schonmal so eine compose-Datei angelegt hat, wird sich über dieses Repo wundern, da es ganz anders aufgebaut ist, wie man erwarten würde. Hier befindet sich nämlich keine compose.yaml-Datei, und die docker-compose-Datei verweist auf sich selbst. Aber wenn man einen tieferen Blick in die readme wirdt, dann findet man dort einen Abschnitt über Windows. Hier wird beschrieben, das man alle möglichen Umgebungsvariablen setzen muss, dann funktioniere es.
Okay, es wird also poer Umgebungsvariable defiuniert, das die yaml-Dateien versteckt in "gem/lib/pupperware/compose-services" zu finden sind.
Nun gut: ich habe es mal ausprobiert, und ja es funktioniert!
Einfach die drei geforderten befehle eintippen:
PS> $ENV:DNS_ALT_NAMES = 'host.example.com'
PS> $ENV:ADDITIONAL_COMPOSE_SERVICES_PATH="${PWD}/gem/lib/pupperware/compose-services"
PS> $ENV:COMPOSE_FILE="${ENV:ADDITIONAL_COMPOSE_SERVICES_PATH}\postgres.yml;${ENV:ADDITIONAL_COMPOSE_SERVICES_PATH}\puppetdb.yml;${ENV:ADDITIONAL_COMPOSE_SERVICES_PATH}\puppet.yml"
Danach noch das zum Bauen erforderliche:
docker-compose up
und schon läuft das System. Ziemlich umständlich dachte ich, und habe auf Basis dieser Compose-Systems, meine eigene Compose-Datei geschrieben.
Einfache Compose-Datei zum bauen eines Puppetservers CE in Docker für Windows
Ich habe mal zuallererst wieder die Datei ins Root gepackt, und diese "compose.yml" genant, und dort die Inhalte der benötigten Dateien reinkopiert. Anschließend habe ich die benötigten Befehle in eine .env-Datei gepackt. Nun kann man mit einem simplen:
docker-compose up
das System bauen. Ich hatte gesehen das der Puppetexplorer fehlte. Dies stellt eine Oberfläche für das Puppetboar dar, und läßt sich sehr leicht und verständlich integrieren:
puppetboard:
image: puppetboard:latest
restart: always
ports:
- "8000:8000"
Nun habe ich alle möglichen Bereiche, welche ich gerne angepasst haben möchte über Umgebungsvariablen steuerbar gemacht. Zum Schluß habe ich noch das "code" - Verzeichnis von Puppet in ein Verzeichnis ausgelagert, sodaß es aus Windows heraus einfacher zu konfigurieren ist. Die Daten findet man im Verzeichnis der Compose-Datei unter "data/puppet-code".
Okay, nun seit Ihr sicherlich auf das Gesamtkustwerk gespannt:
Ich habe es in meinen Github-Account gespeichert:
https://github.com/VoSs2o0o/PuppetServer_Windows/tree/master