Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Lesedauer 7 Min.

Puppet und Ansible im Vergleich

Sowohl Ansible als auch Puppet sind Konfigurationsmanagement-Werkzeuge. Beide verfolgen jedoch unterschiedliche Ansätze, um ihre Aufgaben zu erfüllen.
Das Konfigurationsmanagement als Disziplin wurde bereits in einem ersten Artikel vorgestellt [1]. Die Idee ist, dass DevOps-Engineers über diese Kategorie von Diensten in die Lage versetzt werden, die Verwaltung von Diensten und Softwarepaketen auf den Zielsystemen zu automatisieren.In diesem Kontext wurde bereits umrissen: Puppet ist ein deklaratives System, um einen gewünschten Ist-Zustand auf den Zielsystemen festzulegen und ihn auch zu erhalten. Die Kernfunktionalität von Puppet ist also, auf den verwalteten Knoten zu prüfen, ob die Konfiguration der Softwarepakete dem entspricht, was in einem Katalog festgelegt ist, der durch die Knoten von einem Masterknoten abgerufen wird.Ist die Konfiguration nicht identisch – das kann zum Beispiel der Fall sein, weil die Konfiguration am Master verändert wurde oder weil ein Anwender manuell etwas auf einem Knoten verändert hat –, so wird versucht, wieder den festgelegten Zielzustand zu erreichen.Ansible stellt hingegen nur einen Mechanismus zur Verfügung, um auf mehreren Rechnern sogenannte Playbooks auszuführen. Playbooks stellen hierbei standardisierte Funktionalitäten dar, wie zum Beispiel, dass neue Software installiert wird oder dass Services aktiviert werden. Sie funktionieren somit distributionsübergreifend.Es ist demnach möglich, zu umreißen, dass der vielleicht wesentlichste Unterschied zwischen beiden Systemen der ist, dass Puppet Knoten komplett verwaltet, während Ansible nur Funktionalität gesteuert auf mehreren Knoten ausführt.Man könnte meinen, dass Puppet mehr und komplexere Funktionalität als Ansible bereitstellt und deshalb dieses Werkzeug auch weiter verbreitet sein müsste. Im Zuge von Cloud-Strategien sind Lösungen gefragt, in denen man einzelne Knoten erstellen und zu einem späteren Zeitpunkt auch wieder zerstören kann. Eine dauerhafte Verwaltung von laufenden Knoten ist deshalb nicht mehr der letzte Schrei einer ­innovativen Architektur. Eine klassische Anwendung ist es demnach, neue Knoten mit Terra­form zu provisionieren und gegebenenfalls einzelne Konfigurationsschritte mit Ansible zu tätigen. Wird der Knoten nicht mehr gebraucht, werden die Ressourcen wieder freigegeben.Die traditionelle Puppet-Funktionalität ist also bereits nicht mehr zeitgemäß. Daher bietet Puppetlabs mit Bolt eine Lösung an, die in die Kerbe von Ansible schlägt. Bolt ist jedoch nicht Teil dieses Artikels.Trotz dieses Statements, dass Puppet – abgesehen von Bolt – bereits etwas veraltet ist, sollte aber betont werden, dass immer noch viele Softwareschmieden auf Puppet schwören und auch die Verwaltung ganzer Knoten nicht obsolet werden wird.

Die Aufgabe: Vim installieren

Vim ist ein unverzichtbares Werkzeug für viele System-En­gineers und Entwickler. Auch wenn die Lernkurve dieses Editors hoch ist, wird ein geübter Entwickler, der alle Tastenkürzel in Vim beherrscht, seine Aufgaben schneller erledigen als jeder, der in einer IDE mit der Maus hantiert.Daher ist die Installation von Vim unsere kleinste ausführbare Referenzaufgabe, die wir im Folgenden einmal mit Ansible und einmal mit Puppet lösen wollen. Dies soll ausreichen, um als Leser ein Gefühl dafür zu bekommen, wie es weitergehen könnte.Mit diesem Verständnis soll jeder Entwickler befähigt sein, eine Entscheidung zu treffen, welches Werkzeug interessanter ist, und
es wird auch ein Ausblick darauf gegeben, wie man weiter damit arbeiten kann.

Vim-Installation mit Ansible

Jeder Leser sollte in der Lage sein, Ansible herunterzuladen und zu installieren. Auch sollte jeder Entwickler es schaffen, ein GitHub-Repository lokal zu klonen, um diese Schritte nachvollziehen zu können.Nach der Installation von Ansible holen wir uns das Repository unter [2] auf den Rechner. Wir sehen dort ein sogenanntes Ansible Playbook (Bild 1).
Der Workflowvon Ansible(Bild 1) © Autor
--- 
- name: This is a hello-world example 
  hosts: localhost 
  tasks: 
    - name: Create a file called '/tmp/testfile.txt' 
        with the content 'hello world'. 
      copy: 
        content: hello world 
        dest: /tmp/testfile.txt 
Um dieses Playbook zu starten, nutzen wir folgenden Befehl:
ansible-playbook HelloWorld.yml 
Das Ergebnis sehen wir uns mit diesem Befehl an:
cat /tmp/testfile.txt 
Wir haben also über dieses Playbook eine Textdatei erzeugt (Bild 2).
Ansibleist ausgeführt(Bild 2) © Autor
Werfen wir nun einen Blick auf das Skript, um vom Ergebnis auf die Funktionalität rückzuschließen. Der Bezeichner name beschreibt eine Überschrift. Wir sehen, dass auch weitere Funktionalität über Key-Value-Paare und über Einrückungen festgelegt ist. Das ist Teil des YAML-Standards.Der erste Teil, der mit hosts definiert wird, beschreibt, dass alles lokal erledigt wird. Wären wir in einem Rechnerverbund, könnten wir hier mehrere Knoten angeben. Dann könnten wir ein simples testfile.txt auf beliebig vielen Knoten ablegen.Schauen wir uns die Ausführung an. Der definierte Copy-Task enthält eine Gruppierung. Er definiert zwei Parameter: den Inhalt der Zieldatei und den Zielort.Es gibt eine ganze Reihe unterschiedlicher Tasks, die wir definieren und dann betriebssystemunabhängig verteilen können. Eine vollständige Referenz aller Kommandos kann unter [3] eingesehen werden.Was wäre jetzt der Task, um Vim zu installieren? Hier kann man sich die zweite Datei im Repository ansehen, die den Task package verwendet. Wer dieses Ansible-Skript ausführt, wird sehen, dass damit ein Vim-Editor über den Paketmanager installiert wird.
--- 
- name: install vim 
  hosts: localhost 
  tasks: 
    - name: install a package 
      package: 
        name: vim 
        state: installed 
Das Modul für das Ausrollen eines Pakets ist package.

Vim-Installation mit Puppet

Nun ist es an der Zeit, dass wir Ansible mit Puppet vergleichen (Bild 3).
Ausführungvon Puppet(Bild 3) © Autor
Für die verschiedenen Linux-Distributionen gibt es unterschiedliche Prozeduren, um Puppet zu installieren. Die Installationsmethoden sind auf der Webseite des Herstellers beschrieben [4].Um hier den einfachsten Case vorzustellen, kann ein Repository von Git geklont werden [5]. Es ist relativ simpel gehalten. Für die Installation gibt es ein sogenanntes PP-File, das eine Klasse festlegt, und indem wir die Funktionalität mit ­include deklarieren, wird diese auch aufgerufen:
# Class Definition 
class viminst { 
  # Installing NTP Package 
    package {"vim": 
    ensure=> "present", 
  } 
} 

# Class Declaration 
include viminst 
Mit folgendem Befehl wird Vim auch über Puppet ausgerollt:
puppet apply demovim.pp 

Vom Einfachen zum Komplexen

Es ist mit Kochrezepten also auf relativ überschaubare Weise möglich, erste Pakete mit Ansible oder Puppet zu installieren. Linux-Neulinge könnten vielleicht bei den Vorbereitungsaufgaben, wie dem Installieren der Frameworks, ein wenig aufgehalten werden. Wenn jedoch alles korrekt installiert ist, ist es nur ­eine Frage dessen, syntaktisch Codefiles zu erstellen und diese dann in einem Befehl zu referenzieren. Also keine Hexerei für Programmierer.Doch sind wir bislang auf einem Niveau, bei dem wir auch ohne Ansible und Puppet auskommen. Wenn wir zum Beispiel auf Azure eine Linux-Instanz hochfahren, reicht auch ­eine Kenntnis der Paketmanager der Distribution aus, um mit einem Einzeiler ein Paket zu installieren.Die Bedeutung von Werkzeugen wie Ansible und Puppet wird dann deutlich, wenn wir in einer Infrastruktur arbeiten, bei der wir mehrere Knoten parallel und wiederholt ausrollen müssen und wir uns dabei nicht zu jedem Knoten manuell verbinden wollen. Wird Vim als Standardeditor gesehen und soll dieser Editor auf allen neuen Instanzen installiert sein, kann ein Konfigurationsmanagement-Werkzeug erste Wirkung zeigen. Und ab einer gewissen Komplexität der Installationen werden diese Werkzeuge sogar unverzichtbar, da simple Bash-Skripte oft zu wenig generisch sind, um eine komplette Konfiguration durchzuführen.Unter [6] und [7] sind weitere Projekte zu finden, die als Templates für komplexere Projekte geeignet sind.Prinzipiell gilt, dass sich sowohl bei Puppet als auch bei Ansible einzelne Konfigurationen als Code abbilden lassen, die dann auch Serverrollen und -profile enthalten. Aus diesen Bausteinen kann ein Entwickler komplette Systeme in Code abbilden. Im Internet gibt es dazu viele Videos, und es werden zum Beispiel auf der Linux Academy auch zahlreiche Kurse zu Ansible und Puppet angeboten, die alle Details dazu enthalten, wie man von einfachen Skripten zu einem kompletten Reposi­tory einer Verwaltung kommt.

Fazit

Die Entscheidung für Ansible oder für Puppet ist eine Frage der Anwendung. Will man Knoten komplett verwalten oder will man nur die Installation automatisieren? Das wird vermutlich das wesentlichste Entscheidungsmerkmal sein.Wer Knoten komplett verwalten und auch Änderungen ­automatisch anpassen will, wird an Puppet oder einer der bekannteren Alternativen dazu, die ebenso Agents verwenden, wie Chef oder Saltstack, nicht vorbeikommen.Wer nur automatisiert ausrollen will, ist dagegen mit Ansible gut bedient.Wer neu in dem Thema ist und gern mit dem einsteigen will, was gefragt ist, ist gut beraten, die Kombination Terraform und Ansible zu evaluieren. Zusammen mit den Cloud-Providern und mit Kubernetes ist diese Kombination derzeit unschlagbar.

Fussnoten

  1. Stefan Papp, Puppet, Ansible, Chef und Co. aus der Vogelperspektive, dotnetpro 6/2020, Seite 116 ff.,
  2. dnp_ansible-Demo-Repository,
  3. Playbook-Dokumentation,
  4. Puppet-Installation,
  5. dnp_puppet-Demo-Repository,
  6. Puppet-Template,
  7. Ansible-Template,

Neueste Beiträge

DDC hakt nach: Hör auf, Dich über Verbindungsstrings zu ärgern
Die App läuft lokal wie geschmiert, aber sobald Backend-Services ins Spiel kommen, stottert die Maschine. Connection Strings, die nicht wollen. Emulator-Konfigurationen, die nerven. Johan Smarius erklärt im Interview und auf der .NET Developer Conference 2025, wie es anders - und viel besser geht.
4 Minuten
10. Nov 2025
Generative AI und Python - Python und AI, Teil 4
Generative KI mit Python nutzen und so die Basis für eigene Anwendungen schaffen.
7 Minuten
Chunks mit Köpfchen - KI für KMU, Teil 1
Wie trenne ich Textinformationen in sinnvolle Segmente?
7 Minuten
Miscellaneous

Das könnte Dich auch interessieren

OpenAI AgentKit: Agentenbaukasten
Das AgentKit von OpenAI soll es einfach machen, Agentenlogik mit nur wenig Code und Workflows grafisch aufzusetzen. Aber wie schlägt es sich im Vergleich zu Mitbewerbern?
4 Minuten
Wexflow: .NET Open Source Workflow-Engine - CodeProject
Wexflow ist eine quelloffene und plattformübergreifende Workflow-Engine und Automatisierungsplattform, die darauf abzielt, wiederkehrende Aufgaben zu automatisieren.
2 Minuten
C#-.NET-Apps mit WinUI 3 - Komponentenbasierte Apps mit Fluent/FAST, Teil 3
Microsoft macht mit WinUI 3 ein natives User-Experience-Framework für Windows verfügbar, dessen Komponenten auf dem Microsoft-eigenen Design-System Fluent 2 basieren.
23 Minuten
13. Mai 2024
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige