Puppet-Tutorial für Anfänger: Grundlagen & DSL
⚡ Intelligente Zusammenfassung
Puppet ist eine Open-Source-Plattform für das Konfigurationsmanagement, die die Bereitstellung, Konfiguration und Konsistenz von Servern automatisiert. Sie implementiert Infrastruktur als Code mithilfe einer deklarativen domänenspezifischen Sprache und ersetzt so die repetitive manuelle Administration großer Serverflotten.

Puppet ist ein Open-Source-Konfigurationsmanagement-Tool, mit dem Sie Infrastruktur als Code definieren und große Serverflotten in einem konsistenten, reproduzierbaren Zustand halten können. Bevor wir Puppet kennenlernen, wollen wir zunächst das Konfigurationsmanagement verstehen.
Was ist Konfigurationsmanagement?
Konfigurationsmanagement ist der Prozess der Aufrechterhaltung eines definierten, gewünschten und konsistenten Zustands von Software und Computersystemen – wie Servern, Speichern und Netzwerken. Es ermöglicht zudem den Zugriff auf eine präzise Historie des Systemzustands für Projektmanagement- und Prüfungszwecke.
Systemadministratoren führen hauptsächlich wiederkehrende Aufgaben aus, wie die Installation und Konfiguration von Servern. Diese Fachkräfte können diese Arbeit durch das Schreiben von Skripten automatisieren.
Dies gestaltet sich jedoch schwierig, wenn sie mit einer massiven Infrastruktur arbeiten. Konfigurationsmanagement-Tools wie Puppet wurden eingeführt, um diese Probleme zu lösen.
Was ist Puppe?
Marionette Puppet ist ein Systemverwaltungstool zur Zentralisierung und Automatisierung des Konfigurationsverwaltungsprozesses. Puppet wird auch als Softwareverteilungstool eingesetzt.
Es handelt sich um eine Open-Source-Konfigurationsmanagement-Software, die weit verbreitet für die Serverkonfiguration, -verwaltung, -bereitstellung und die Orchestrierung verschiedener Anwendungen und Dienste in der gesamten Infrastruktur einer Organisation eingesetzt wird.
Puppet wurde speziell für die Verwaltung der Konfiguration von Linux und entwickelt Windows Systeme. Es ist in Ruby geschrieben und nutzt seine Einzigartigkeit DOMain Sspezifisch LSprache (DSL) zur Beschreibung der Systemkonfiguration.
Was sind die Puppet-Versionen?
Puppet gibt es in zwei Versionen:
- Open-Source-PuppeEs handelt sich um eine Basisversion des Konfigurationsverwaltungstools Puppet, auch bekannt als Open Source Puppet. Sie ist direkt auf der Puppet-Website verfügbar und unter der Apache-2.0-Lizenz lizenziert.
- Puppet EnterpriseEine kommerzielle Version, die Funktionen wie Compliance-Berichte, Orchestrierung, rollenbasierte Zugriffskontrolle, eine grafische Benutzeroberfläche, eine API und Befehlszeilentools für die effektive Verwaltung von Knoten bietet.
Was kann Puppet?
Nehmen wir beispielsweise an, Sie verfügen über eine Infrastruktur mit etwa 100 Servern. Als Systemadministrator ist es Ihre Aufgabe sicherzustellen, dass alle diese Server stets auf dem neuesten Stand sind und voll funktionsfähig laufen.

Hierfür können Sie Puppet verwenden, mit dem Sie einfachen Code schreiben können, der automatisch auf diesen Servern bereitgestellt wird. Dies reduziert den manuellen Aufwand und macht den Entwicklungsprozess schnell und effektiv.

Puppet führt die folgenden Funktionen aus:
- Mit Puppet können Sie für jeden Host unterschiedliche Konfigurationen definieren.
- Das Tool ermöglicht die kontinuierliche Überwachung von Servern, um zu bestätigen, ob die erforderliche Konfiguration vorhanden und unverändert ist. Wird die Konfiguration geändert, stellt Puppet die vordefinierte Konfiguration des Hosts wieder her.
- Es bietet außerdem die Kontrolle über jedes konfigurierte System, sodass eine zentralisierte Änderung automatisch überall umgesetzt wird.
- Es dient auch als Bereitstellungstool, da es Software automatisch auf dem System installiert. Es implementiert Infrastruktur als Code, weil Richtlinien und Konfigurationen als Code geschrieben werden.
Puppet DSL und Programmierparadigmen
Bevor wir die Puppet-DSL kennenlernen, wollen wir Programmierparadigmen verstehen. Ein Programmierparadigma ist ein Stil, den man bei der Computerprogrammierung verwendet.
Vier Arten von Paradigmen sind:
- Imperativ.
- Deklarativ.
- Funktional (das als Teilmenge des deklarativen Paradigmas betrachtet wird).
- Objektorientierter.
Wir werden uns auf das imperative und das deklarative Paradigma konzentrieren.
Imperative Paradigmen
Dieses Programmierparadigma drückt die Logik einer Berechnung aus (was zu tun ist) und beschreibt auch ihren Kontrollfluss (wie es zu tun ist).
Ejemplo:
Angenommen, Sie fahren ins Büro. Sie bestellen ein Taxi und geben dem Fahrer Schritt für Schritt Anweisungen, bis Sie Ihr Büro erreichen. Die genaue Angabe, was zu tun ist und wie es zu tun ist, ist ein imperativer Schreibstil.
Deklarative Paradigmen
Dieses Programmierparadigma drückt die Logik einer Berechnung aus (was zu tun ist), ohne ihren Kontrollfluss zu beschreiben (wie es zu tun ist).
Ejemplo:
Angenommen, Sie fahren ins Büro. Sie bestellen ein Uber und geben nur das Ziel (das Büro) an. Anzugeben, was zu tun ist, aber nicht wie, ist ein deklarativer Programmierstil.
| Paradigma | Aktivitäten | How to do |
|---|---|---|
| Imperativ | Ja | Ja |
| Deklarativ | Ja | Nein |
Puppet verwendet ein deklaratives Programmierparadigma
Puppet verwendet einen deklarativen Programmieransatz.
Ejemplo: Erstellen Sie einen Benutzer im System.
Dies kann mithilfe eines imperativen Programmiermusters und eines Shell-Skripts erfolgen. Hier legen wir fest, wie der Benutzer erstellt wird und welche Befehle darauf angewendet werden. Betriebssystem.
Allerdings ist dies auch mit einem deklarativen Programmiermuster möglich, das nur wenige Zeilen Puppet-Code und die domänenspezifische Sprache (DSL) von Puppet erfordert und dennoch zum gleichen Ergebnis führt.
Bereitstellungsmodelle von Konfigurationsmanagement-Tools
Es gibt zwei Bereitstellungsmodelle für Konfigurationsmanagement-Tools:
- Push-basiertes Bereitstellungsmodell: initiiert durch einen Masterknoten.
- Pull-basiertes Bereitstellungsmodell: von Agenten initiiert.
Push-basiertes Bereitstellungsmodell
In diesem Bereitstellungsmodell überträgt der Master-Server die Konfigurationen und die Software an die einzelnen Agenten. Nach Überprüfung einer sicheren Verbindung führt der Master-Server Befehle remote auf den Agenten aus. Zum Beispiel: Ansible und Salzstapel.
Pull-basiertes Bereitstellungsmodell
In diesem Bereitstellungsmodell kontaktieren einzelne Server einen Master-Server, verifizieren und stellen eine sichere Verbindung her, laden ihre Konfigurationen und Software herunter und konfigurieren sich anschließend entsprechend – beispielsweise Puppet und Chef.
Wie funktioniert Puppet?
Puppet basiert auf einem Pull-Bereitstellungsmodell, bei dem sich die Agentenknoten regelmäßig – nach jedem 1800 Sekunden später wird mit dem Master-Knoten geprüft, ob auf dem Agenten Aktualisierungen erforderlich sind. Falls eine Aktualisierung notwendig ist, ruft der Agent den erforderlichen Puppet-Code vom Master ab und führt die erforderlichen Aktionen aus.
Lassen Sie uns dies anhand eines Beispiels einer Master-Agent-Konfiguration erläutern.
Der Meister
Dies ist ein Linux-basierter Rechner mit installierter Puppet-Master-Software. Er ist für die Verwaltung von Konfigurationen in Form von Puppet-Code zuständig. Der Master-Knoten kann ausschließlich unter Linux laufen.
Die Agenten
Dies sind die von Puppet verwalteten Zielrechner, auf denen die Puppet-Agentensoftware installiert ist.
Der Agent kann auf jedem unterstützten Betriebssystem, wie z. B. Linux, konfiguriert werden. Windows, Solarisoder Mac OS.
Die Kommunikation zwischen Master und Agent wird über sichere Zertifikate hergestellt.

Kommunikation zwischen dem Master und dem Agenten
Schritt 1) Sobald die Verbindung zwischen Agent und Master hergestellt ist, sendet der Puppet-Agent Daten über seinen Zustand an den Puppet-Master-Server. Diese Daten werden als Fakten bezeichnet und enthalten unter anderem Hostname, Kernel-Details, IP-Adresse und Dateinamen.

Schritt 2) Der Puppet-Master verwendet diese Daten und erstellt eine Liste der Konfigurationen, die auf den Agenten angewendet werden sollen. Diese Liste der auf einem Agenten durchzuführenden Konfigurationen wird als Konfigurationsliste bezeichnet. KatalogDies kann beispielsweise die Installation, Aktualisierung oder Deinstallation von Paketen, die Erstellung von Dateisystemen, die Erstellung oder Löschung von Benutzern, einen Neustart des Servers, Änderungen der IP-Konfiguration und so weiter umfassen.
Schritt 3) Der Agent verwendet diese Konfigurationsliste, um alle erforderlichen Konfigurationsänderungen auf dem Knoten anzuwenden.
Wenn keine Abweichungen in der Konfiguration vorliegen, nimmt der Agent keine Konfigurationsänderungen vor und lässt den Knoten mit der gleichen Konfiguration weiterlaufen.

Schritt 4) Sobald der Vorgang abgeschlossen ist, meldet der Knoten dem Puppet-Master zurück, dass die Konfiguration angewendet und abgeschlossen wurde.
Puppenblöcke
Puppet bietet die Flexibilität, Berichte mithilfe von Puppet-APIs in Tools von Drittanbietern zu integrieren.
Es gibt vier Arten von Puppenbausteinen:
- Ressourcen
- Klassen
- Manifest
- Module
Puppet-Ressourcen
Puppet-Ressourcen sind die Bausteine von Puppet.
Ressourcen sind die eingebaute Funktionen die im Hintergrund laufen, um die erforderlichen Operationen in Puppet durchzuführen.
Puppenunterricht
Verschiedene Ressourcen können zu einer Einheit zusammengefasst werden, die als Klasse bezeichnet wird.
Puppenmanifest
Ein Manifest ist ein Verzeichnis, das Puppet-DSL-Dateien enthält. Diese Dateien haben die Dateiendung .pp, was für Puppet-Programm steht. Der Puppet-Code besteht aus Definitionen oder Deklarationen von Puppet-Klassen.
Puppet-Module
Module sind Sammlungen von Dateien und Verzeichnissen, wie zum Beispiel Manifeste und Klassendefinitionen. Sie sind die wiederverwendbaren und gemeinsam nutzbaren Einheiten in Puppet.
So befasst sich beispielsweise die MySQL Modul installiert und konfiguriert MySQLund die Jenkins Modul verwaltet Jenkins.

Arten von Puppet-Ressourcen
Im Allgemeinen besteht ein System aus Dateien, Benutzern, Diensten, Prozessen, Paketen usw. In Puppet werden diese als Ressourcen bezeichnet und bilden die grundlegenden Bausteine von Puppet.
Alle Operationen auf Puppet-Agenten werden mithilfe von Puppet-Ressourcen durchgeführt.
Puppet-Ressourcen sind vorgefertigte Werkzeuge, mit denen sich verschiedene Aufgaben und Operationen auf jeder unterstützten Plattform durchführen lassen. Man kann eine einzelne Puppet-Ressource für eine spezifische Aufgabe verwenden oder mehrere Puppet-Ressourcen gemeinsam für komplexe Anwendungskonfigurationen und -bereitstellungen einsetzen.
Ressourcen können unterschiedliche Typen haben. Puppengebrauch RESSOURCEN und Ressourcentypen um die Konfiguration eines Systems zu beschreiben.
Es gibt drei Arten von Ressourcentypen:
- Puppet-Kern oder integrierte Ressourcentypen.
- Puppet-definierte Ressourcentypen.
- Benutzerdefinierte Puppet-Ressourcentypen.
Puppet-Kern oder integrierte Ressourcentypen
Kern- oder integrierte Ressourcentypen sind die vordefinierten Puppet-Ressourcentypen, die mit der Puppet-Software ausgeliefert werden. Alle Kern- oder integrierten Puppet-Ressourcentypen werden vom Puppet-Team entwickelt und gepflegt.
Puppet-definierte Ressourcentypen
Definierte Ressourcentypen sind leichtgewichtige Ressourcentypen, die in der deklarativen Sprache Puppet unter Verwendung einer Kombination bestehender Ressourcentypen geschrieben sind.
Benutzerdefinierte Puppet-Ressourcentypen
Benutzerdefinierte Ressourcentypen sind vollständig angepasste Ressourcentypen, die in Ruby geschrieben sind.
Lassen Sie uns die Puppet-Ressourcentypen genauer betrachten.
Geben Sie im Terminal den folgenden Befehl ein, um eine Liste der Puppet-bezogenen Unterbefehle anzuzeigen:
Puppet --help
In unserem Fall interessiert uns der Unterbefehl „„Ressourcen““, das wir verwenden werden, um Informationen über die integrierten Puppet-Ressourcentypen zu finden.
Geben Sie im Terminal einen der folgenden Befehle ein, um eine Liste der Aktionen im Zusammenhang mit dem Puppet-Unterbefehl „„Ressourcen“"
Puppet help resource Puppet resource --help
In diesem Fall haben wir „Ressourcen“ als Unterbefehl und –Typen als die Handlung.
Puppet verfügt über 49 integrierte Kernressourcentypen.
Geben Sie im Terminal den folgenden Befehl ein, um eine Liste der verfügbaren integrierten Puppet-Ressourcentypen anzuzeigen:
puppet resource –types
Jeder Typ unterstützt eine Liste von Attribute. Diese Attribute stellen eine detaillierte Beschreibung bereit, die Puppet zum Verwalten der Ressource verwendet.
Um alle Attribute eines Puppet-Ressourcentyps zu ermitteln, verwenden Sie folgenden Befehl:
puppet describe <resource type name>
Die Parameter listen alle verfügbaren Attribute für diesen Ressourcentyp auf.
Puppet-Beschreibungspaket
Für einen neuen Benutzer ist es schwierig, die vielen unstrukturierten Puppet-Code-Dateien zu verstehen und zuzuordnen. Hier benötigen wir eine Gruppe.ping Die Operationen werden miteinander verknüpft. Ziel ist es, ein einzelnes Problem zu lösen, beispielsweise alle Operationen, die zur Konfiguration von SSH auf einem Server, eines NTP-Dienstes oder eines kompletten Webservers oder Datenbankservers von Grund auf erforderlich sind.
Was sind Puppenklassen?
Puppet-Klassen sind Sammlungen von Puppet-Ressourcen, die zu einer einzigen Einheit zusammengefasst sind.
Puppet führte Klassen ein, um die Struktur wiederverwendbar und organisiert zu machen.
Zuerst müssen wir eine Klasse mithilfe der Klassendefinitionssyntax definieren. Klassen müssen eindeutig sein und dürfen nur einmal mit demselben Namen deklariert werden:
class <class-name> {
<Resource declarations>
}
Ejemplo:
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
Bisher haben wir die Klasse nur definiert, aber noch nirgends verwendet. Das bedeutet, dass der von uns geschriebene Code niemals ausgeführt wird, solange wir diese Klasse nicht an anderer Stelle deklarieren.
Klassendeklaration
Um eine definierte Klasse in Ihrem Code zu verwenden, verwenden Sie die das Stichwort.
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
include ntpconfig
Lassen Sie uns dies anhand eines realen Beispiels verdeutlichen.
Demo-Installation von NTP
Stellen Sie zunächst sicher, dass das NTP-Paket nicht bereits auf dem Server vorhanden ist. Der folgende Befehl liefert keine Ausgabe, wenn das NTP-Paket nicht auf dem Server vorhanden ist:
rpm -qa | grep -i ntp
Wie wir sehen, ist das NTP-Paket bereits auf dem Server vorhanden. Entfernen wir nun das vorhandene NTP-Paket:
yum remove ntp
Nach dem Entfernen des Pakets stellen Sie sicher, dass die Datei ntp.conf nicht mehr existiert:
ls -lrt /etc/ntp.conf
Überprüfen Sie, ob der NTP-Dienst nicht existiert, indem Sie folgenden Befehl ausführen:
systemctl status ntp
Erstellen Sie eine neue PP-Datei, um den Code zu speichern. Von der Befehlszeile:
vi demontp.pp
Wechseln Sie in den Einfügemodus, indem Sie die Taste „i“ auf der Tastatur drücken.
Geben Sie den folgenden Code ein, um eine neue Datei zu erstellen:
# Class Definition
class ntpconfig {
# Installing NTP Package
package {"ntp":
ensure=> "present",
}
# Configuring NTP configuration file
file {"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
# Starting NTP services
service {"ntpd":
ensure=> "running",
}
}
Wenn Sie mit der Bearbeitung fertig sind, drücken Sie Esc.
Um die Datei zu speichern, drücken Sie :wq!
Der nächste Schritt ist, aus der Ferne überprüfen ob der Code Syntaxfehler enthält. Führen Sie den folgenden Befehl aus:
puppet parser validate demontp.pp
Stellen Sie sicher, dass Sie auf die folgende Option umgeschaltet haben: Wurzel Der Benutzer soll den Test fehlerfrei abschließen können, indem er folgenden Befehl ausführt:
su root
Test ist der nächste Schritt im Codeerstellungsprozess. Führen Sie den folgenden Befehl aus, um einen Smoke-Test durchzuführen:
Puppet applies demontp.pp --noop
Der letzte Schritt ist zu Lauf Puppet im Realmodus ausführen und die Ausgabe überprüfen.
puppet apply demontp.pp
Puppet hat nichts ausgeführt, da die Demoklasse einfach nur definiert aber nicht , erklärt.
Solange Sie die Puppet-Klasse nicht deklarieren, wird der Code nicht angewendet.
Lassen Sie uns erklären die Demo-Klasse innerhalb desselben Codes mit Geben Sie den Klassennamen an am Ende des Codes:
# Class Definition
class ntpconfig {
# Installing NTP Package
package {"ntp":
ensure=> "present",
}
# Configuring NTP configuration file
file {"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
# Starting NTP services
service {"ntpd":
ensure=> "running",
}
}
# Class Declaration
include ntpconfig
Wiederum aus der Ferne überprüfen ob der Code Syntaxfehler enthält. Führen Sie den folgenden Befehl aus:
puppet parser validate demontp.pp
Stellen Sie sicher, dass Sie auf die folgende Option umgeschaltet haben: Wurzel Der Benutzer soll den Test fehlerfrei abschließen können, indem er folgenden Befehl ausführt:
su root
Tests ist der nächste Schritt im Codeerstellungsprozess. Führen Sie den folgenden Befehl aus, um einen Smoke-Test durchzuführen:
Puppet apply demontp.pp --noop
Der letzte Schritt ist zu Lauf Puppet im Realmodus ausführen und die Ausgabe überprüfen.
puppet apply demontp.pp
Diesmal wird der Code angewendet, weil die Klasse definiert und anschließend deklariert wurde.
Stellen Sie sicher, dass die Datei ntp.conf nun existiert:
ls -lrt /etc/ntp.conf
Überprüfen Sie mit folgendem Befehl, ob der NTP-Dienst gestartet wurde:
systemctl status ntpd











