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., http://www.dotnetpro.de/A2006Configuration
  2. dnp_ansible-Demo-Repository, http://www.dotnetpro.de/SL2011AnsiblePuppet1
  3. Playbook-Dokumentation, http://www.dotnetpro.de/SL2011AnsiblePuppet2
  4. Puppet-Installation, http://www.dotnetpro.de/SL2011AnsiblePuppet3
  5. dnp_puppet-Demo-Repository, http://www.dotnetpro.de/SL2011AnsiblePuppet4
  6. Puppet-Template, http://www.dotnetpro.de/SL2011AnsiblePuppet5
  7. Ansible-Template, http://www.dotnetpro.de/SL2011AnsiblePuppet6

Neueste Beiträge

DWX hakt nach: Wie stellt man Daten besonders lesbar dar?
Dass das Design von Websites maßgeblich für die Lesbarkeit der Inhalte verantwortlich ist, ist klar. Das gleiche gilt aber auch für die Aufbereitung von Daten für Berichte. Worauf besonders zu achten ist, erklären Dr. Ina Humpert und Dr. Julia Norget.
3 Minuten
27. Jun 2025
DWX hakt nach: Wie gestaltet man intuitive User Experiences?
DWX hakt nach: Wie gestaltet man intuitive User Experiences? Intuitive Bedienbarkeit klingt gut – doch wie gelingt sie in der Praxis? UX-Expertin Vicky Pirker verrät auf der Developer Week, worauf es wirklich ankommt. Hier gibt sie vorab einen Einblick in ihre Session.
4 Minuten
27. Jun 2025
„Sieh die KI als Juniorentwickler“
CTO Christian Weyer fühlt sich jung wie schon lange nicht mehr. Woran das liegt und warum er keine Angst um seinen Job hat, erzählt er im dotnetpro-Interview.
15 Minuten
27. Jun 2025
Miscellaneous

Das könnte Dich auch interessieren

UIs für Linux - Bedienoberflächen entwickeln mithilfe von C#, .NET und Avalonia
Es gibt viele UI-Frameworks für .NET, doch nur sehr wenige davon unterstützen Linux. Avalonia schafft als etabliertes Open-Source-Projekt Abhilfe.
16 Minuten
16. Jun 2025
Mythos Motivation - Teamentwicklung
Entwickler bringen Arbeitsfreude und Engagement meist schon von Haus aus mit. Diesen inneren Antrieb zu erhalten sollte für Führungskräfte im Fokus stehen.
13 Minuten
19. Jan 2017
Evolutionäres Prototyping von Business-Apps - Low Code/No Code und KI mit Power Apps
Microsoft baut Power Apps zunehmend mit Features aus, um die Low-Code-/No-Code-Welt mit der KI und der professionellen Programmierung zu verbinden.
19 Minuten
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige