Serververwaltung mit Python und Fabric

© Rusty-Elliott, 123RF

Patchwork

Fabric macht es einfach, auf einer Vielzahl von Servern sich wiederholende Tasks auszuführen. Voraussetzung dafür sind nur Python und eine funktionierende SSH-Konfiguration.
Obwohl Linux als freie Software kostenlos verfügbar ist, setzen viele beim Unternehmenseinsatz auf Enterprise-Distributionen mit Support. Wo die Stärken der ... (mehr)

Die beiden Tools Chef und Puppet [1] sind hervorragend dazu geeignet, große Serverlandschaften zu verwalten, erfordern aber einen ziemlichen Konfigurationsaufwand. Wer regelmäßig auf mehreren Servern bestimmte Befehle ausführen möchte, sollte alternativ einen Blick auf Fabric [2] werfen, ein beeindruckendes Python-Modul, das solche Aufgaben als flexible Kochrezepte verwaltet.

Tägliche Aufgaben in Fabric-Tasks zu verwandeln, ist eine Hilfe für jeden, der mit unterschiedlichen Systemen arbeitet. Diese Tasks lassen sich mit dem Befehl »fab« ausführen. Ursprünglich verfügte Fabric nur über ein paar einfache Features, aber im Lauf der Jahre hat es so viele dazugewonnen, dass es in manchen Fällen Chef und Puppet bereits ersetzen kann.

Setzt auf SSH

Wenn schon eine SSH-Konfiguration existiert, um sich auf einem anderen Rechner einzuloggen, kann Fabric davon Gebrauch machen. Lokal funktioniert Fabric aber natürlich auch. Fabric kann einzelne Hosts in bestimmte Tasks ein- oder ausschließen, entweder direkt über ihre Namen oder über zugewiesene Rollen. Tasks kann Fabric dabei parallel oder hintereinander ausführen. Zur besseren Kontrolle zeigt Fabric auf Wunsch immer an, was es gerade macht – das hilft zum Beispiel bei der Fehlersuche. Einfache Fähigkeiten für das Management von Dateien bringt Fabric im Modul »fabric.contrib.files« mit. Mithilfe von »pip« ist Fabric einfach zu installieren:

 

Wer Pip nicht installiert hat, kann es stattdessen mit Easy-Install versuchen:

 

Alternativ funktioniert normalerweise auch die Installation aus dem Quellcode ohne große Probleme.

Ruft man »fabric« auf, sucht das Tool im aktuellen Verzeichnis nach der Datei »fabfile.py« oder wandert die Verzeichnishierarchie nach oben, bis es eine solche Datei findet. Auf diese Art ist es einfach, in verschiedenen Verzeichnissen unterschiedliche Tasks zu verwalten. Mit dem Schalter »-f« lässt sich das Taskfile auch direkt angeben.

Ein erster einfacher Fabric-Task sieht in etwa so aus:

 

Er führt das Uptime-Kommando auf jedem Rechner aus, der beim Aufruf auf der Kommandozeile aufgeführt wird, zum Beispiel:

 

Eine Liste aller verfügbaren Fabric-Tasks zeigt »fab -l« , allerdings sind dies die sogenannten "old style" Tasks, die alle definierten Funktionen einschließen. Besser ist es, die new style Tasks zu verwenden, bei denen nur Tasks angezeigt werden, die sich auch verwenden lassen und nicht solche, die nur für interne Zwecke eingesetzt werden. Definiert man den obigen Task wie folgt neu:

 

zeigt »fab -l« nur noch »get_uptime« an und übergeht die »uptime« -Funktion. Wie das Ergebnis aussieht, wenn man den Task mit zwei Hosts aufruft, zeigt das Listing 1.

Listing 1

Uptime von zwei Rechnern

 

Hosts in der Datei

Die Hosts immer wieder auf der Kommandozeile anzugeben, ist auf Dauer mühsam. Wie das nächste Beispiel zeigt, kann man sie auch direkt in einem Task definieren. Es verwendet Fabric, um eine Website basierend Git zu deployen. Weil die Hosts in der Datei definiert sind, genügt es, auf der Kommandozeile »fab deploy« auszuführen.

Zuerst verwendet das Skript das Python-Datetime-Modul, um einen Git-Tag-String zusammenzusetzen, welcher den Deployment-Zeitpunkt widerspiegelt.

Dieser Task soll nur einmal ausgeführt werden, dafür sorgt der Dekorator »@runs_once« . Der »deploy« -Task führt den »tag_deployment« -Task aus und wechselt ins Verzeichnis »/home/web« , um dort das Git-Kommando zu starten. Am Ende des With-Blocks wechselt das Skript automatisch wieder zurück ins vorherige Verzeichnis und startet mit »sudo« den Apache-Webserver neu. Abbildung 1 zeigt den Ablauf.

Abbildung 1: Deployment einer Webanwendung mithilfe von Fabric.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Setup eines Kubernetes-Clusters mit Kops

Vor allem für Testinstallationen von Kubernetes gibt es einige Lösungen wie Kubeadm und Minikube. Für das Setup eines Kubernetes-Clusters in Cloud-Umgebungen hat sich Kops als Mittel der Wahl bewährt. Wir beschreiben seine Fähigkeiten und geben eine Anleitung für den praktischen Einsatz. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Container

Wie setzen Sie Container ein?

  • Gar nicht
  • Docker standalone
  • Docker mit Kubernetes
  • Docker mit Swarm
  • Docker mit anderem Management
  • LXC/LXD
  • Rocket
  • CRI-O auf Kubernetes
  • Container auf vSphere
  • Andere (siehe Kommentare auf der Ergebnisseite)

Google+

Ausgabe /2018

Microsite