20 Punkte von GN⁺ 2024-05-01 | 3 Kommentare | Auf WhatsApp teilen
  • Ein Tool zur Automatisierung von Infrastruktur mit Python
  • Schnell skalierbar von einem einzelnen Server bis zu Tausenden von Servern
  • Geeignet für die Ausführung ad-hoc Befehle, die Bereitstellung von Services und Konfigurationsmanagement

Warum man pyinfra verwenden sollte

  • Ultraschnelle Ausführung mit vorhersagbarer Performance für Tausende von Zielen
  • Sofortiges Debugging durch Echtzeit-Ausgabe von stdin/stdout/stderr (-vvv)
  • Unterstützt Diff und Dry Run vor dem Anwenden von Änderungen und bietet damit Idempotenz (idempotent operations)
  • Erweiterbar durch das gesamte Python-Paket-Ökosystem
  • Agentenlose Ausführung auf jedem Gerät, das SSH unterstützt
  • Integriert mit Konnektoren wie Docker, Terraform und Vagrant

Schnellstart

  • Installation von pyinfra mit dem Befehl pip install pyinfra
  • Ausführung von Befehlen über SSH möglich
    • pyinfra my-server.net exec -- echo "hello world"
  • Ziele wie Docker, lokale Maschinen und andere Konnektoren können angegeben werden
    • pyinfra @docker/ubuntu exec -- echo "Hello world"
    • pyinfra @local exec -- echo "Hello world"
  • Zusätzlich zur Befehlsausführung lassen sich mit Operations Zustände definieren
    • pyinfra @docker/ubuntu apt.packages iftop update=true _sudo=true
  • Dies kann in einer Python-Datei wie deploy.py gespeichert und ausgeführt werden
  • Durch die Kombination von Inventory, Operations und Python-Code lässt sich alles bereitstellen

Weitere Informationen finden sich im Getting-Started-Guide, im Guide zur Verwendung von Operations, zur Nutzung von Inventory und Daten, zu globalen Argumenten und zur CLI oder in den dokumentierten Beispielen.

Meinung von GN⁺

  • Bei Deployment-Tools sind Sicherheit und Kontrolle wichtig, doch da der Fokus eher auf den Funktionen als Infrastruktur-Management-Tool liegt, können im Deployment-Prozess Probleme entstehen
  • pyinfra selbst erzwingt keine Deployment-Best-Practices, daher müssen Teams eigene Regeln festlegen und pflegen
  • Die Verwendung von Python als Sprache ist ein Vorteil, weil das Python-Ökosystem genutzt werden kann und es für Entwickler vertraut ist, bringt aber im Vergleich zu anderen gängigen Deployment-Tools eine höhere Einstiegshürde mit sich
  • Es wirkt wie ein geeignetes Tool für einfache und flexible Deployment-Szenarien; für komplexe Enterprise-Deployments könnten ausgereiftere Tools wie Ansible oder Puppet besser geeignet sein
  • Die Integration mit IaC-Tools wie Terraform oder Pulumi ist positiv, allerdings bleibt fraglich, ob es viele Aufgaben gibt, die nicht bereits allein mit diesen lösbar sind

3 Kommentare

 
savvykang 2024-05-02

Ich denke, dass Ansible eine andere Möglichkeit braucht, Playbooks außer in YAML zu definieren. Dass Ansible für die Datenverarbeitung Python-Funktionen als Jinja-Filter erneut implementiert und bereitstellt, halte ich für eine enorme Verschwendung. Wenn das Schema der Playbook-Facts mit den Eingaben der Tasks übereinstimmt, ist das vielleicht kein Problem, aber in der Realität sind Zwischenschritte zur Datenverarbeitung zwangsläufig viel häufiger. Auch die Entscheidung, Jinja für die Datenverarbeitung zu verwenden, wirkt auf mich wie eine kurzsichtige technische Entscheidung.

 
xguru 2024-05-01

pyinfra – ein Python-basiertes Tool zur Infrastrukturautomatisierung

Ich hatte es schon einmal gepostet, als damals Version 1.0 veröffentlicht wurde, aber es wird weiterhin sehr aktiv aktualisiert.
Aktuell ist es bei Version 2.92, und die derzeitige Beta von 3.0 soll bald veröffentlicht werden.

 
GN⁺ 2024-05-01
Hacker-News-Kommentare

Zusammenfassung:

  • Ansible benötigt auf dem Zielsystem einen Python-Interpreter, während bei Pyinfra eine Shell ausreicht. Pyinfra ist unterschätzte Software.
  • Ansible ist gut, aber am Ende schreibt man Python in Form von YAML-Strings. Dann ist es besser, von Anfang an direkt Python zu verwenden.
  • Ein Pyinfra-Entwickler hat kommentiert und empfiehlt die aktuell noch in der Beta befindliche v3. Sie sei stabil und werde für das offizielle Release vorbereitet.
  • Es sind mehrere frühere HN-Beiträge zu Pyinfra verlinkt.
  • Ein Nutzer ist von Ansible zu Pyinfra gewechselt und findet Pyinfra deutlich sauberer. Besonders gut fand er, dass Pyinfra auch in Fedora-CoreOS-Umgebungen ohne Python genutzt werden konnte.
  • Es gibt auch die Meinung, dass Puppet in diesem Bereich das passendste Tool ist. Es ist einfach und bietet bei Bedarf die Fähigkeiten einer Programmiersprache. Allerdings besteht bei der Benutzerfreundlichkeit Verbesserungsbedarf.
  • Der Einsatz von CM-Tools (Configuration Management) kann sehr schwierig sein. Selbst Experten stimmen zu, dass die Wartungskosten hoch sind. Die Weiterentwicklung sollte stärker in Richtung engerer Integration mit Containern gehen.
  • Python ist für Infrastrukturmanagement möglicherweise nicht geeignet. Es gibt Einschränkungen wie Binary-Builds, Reproduzierbarkeit von Paketen und das Fehlen statischer Typisierung.
  • Es wird vorgestellt, wie sich mit der Kombination aus Pyinfra, Docker und Tailscale Dienste einfach bereitstellen lassen. Früher hätte man dafür Kubernetes verwendet, aber das ist überdimensioniert und zudem schwer zu debuggen.
  • Dank Pyinfra konnten die chronischen Probleme von Ansible vermieden werden. In Pyinfra lassen sich Inventar und Variablen flexibel als Python-Skripte definieren, was praktisch ist.