Mit Python das Netzwerk steuern

Automatisierte Bereitstellung mit Pyinfra

| Autor / Redakteur: Thomas Joos / Stephan Augsten

Das Kommandozeilen-Tool Pyinfra hilft bei der automatisierten Service- und App-Bereitstellung.
Das Kommandozeilen-Tool Pyinfra hilft bei der automatisierten Service- und App-Bereitstellung. (Bild: VIT / Pyinfra)

Das Tool Pyinfra ermöglicht die automatisierte Bereitstellung von Servern und Diensten. Mit Hilfe von Python-Skripten lassen sich verschiedene Aufgaben zentral steuern oder in eigene Programme integrieren.

Wenn im Netzwerk zahlreiche Server oder Dienste parallel automatisiert bereitgestellt werden müssen, kann das Tool Pyinfra mittels Python-Skripten dabei helfen. Vereinfacht wird die Einbindung der Skripte dadurch, dass das Tool selbst in Python geschrieben ist. Der Schwerpunkt von Pyinfra liegt vor allem im Linux-Bereich. Die Kommunikation zu den Servern läuft über SSH.

Administratoren oder Entwickler legen über eine Config-Datei fest, welche Anpassungen Pyinfra auf einem Server durchführen soll. Für die automatisierte Installation wird Python genutzt. Entwickler, die umfassende Python-Programme im Einsatz haben, können diese mit Pyinfra über die dazu zur Verfügung stehende API einbinden.

Mit Pyinfra lassen sich Anwendungen und Dienste auch in sehr großen Umgebungen automatisiert bereitstellen. Getestet wurde Pyinfra mit Ubuntu, Debian, CentOS, Fedora und OpenBSD. Generell lassen sich auch Anpassungen für Mac-Rechner vornehmen. Im Folgenden die unterstützten Betriebssysteme, wobei es sich um die Mindestversion handelt (später erschienene Versionen stellen i.d.R. kein Problem dar):

  • Ubuntu 14
  • Debian 7
  • CentOS 6
  • Fedora 23
  • OpenBSD 5.8
  • Mac OS 10.12

Generell können aber auch andere Betriebssysteme und Linux-Distributionen mit Pyinfra automatisiert werden. Hier müssen Entwickler testen, ob die von ihnen gewünschten Funktionen mit dem jeweiligen Betriebssystem kompatibel sind. Wichtig ist, dass auf dem Endgerät SSH zur Verfügung steht sowie der Zugriff auf die Shell des Servers möglich ist.

Grundlagen von Pyinfra

Pyinfra arbeitet vor allem mit den Begriffen Inventory, Deploy, Operations und Facts. Alle vier Bereiche werden über Skripte und Konfigurationsdateien per CLI gesteuert oder lassen sich über die Python-API in eigenen Programmen anbinden.

Inventory legen die Ziel-Systeme fest, die gesteuert werden sollen, Deploys sind die Bereitstellungen, also die Pakete, die im Netzwerk bereitgestellt werden sollen. Operations führen Aktionen durch und Facts steuern den aktuellen Zustand eines Servers, der mit Operations und Deploys erweitert wird.

Installation und Einrichtung

Für die Installation und Einrichtung von Pyinfra wird auf dem Linux-Server Python benötigt. Anschließend kann mit „pip“ die Installation erfolgen:

pip install pyinfra

Auf Ubuntu-Servern kann die Installation mit „sudo apt-get install pyinfra“ erfolgen. Um Bereitstellungen durchzuführen, ist ein „Inventory“ notwendig. Das legt die Ziel-Hosts fest, Gruppen und die dazugehörigen Daten. Ein einfaches Inventory besteht generell zunächst aus einer Kommagetrennten Liste aus Hosts. Um Pyinfra zu testen, kann eine lokale Ausgabe erfolgen, die mit Pyinfra ausgelöst wird:

pyinfra @local exec -- echo "hello world"

Bereitstellungen mit Pyinfra

Um Bereitstellungen durchzuführen, sind Python-Dateien notwendig. In diesen werden die einzelnen Schritte zur Bereitstellung definiert. Dabei kann es sich auch um das Aufrufen externer Programme und Python-Skripte handeln.

Alle verbundenen Pakete, Skripte und Programme werden „Deploys“ genannt und dienen der Bereitstellung. Die genaue Vorgehensweise dazu zeigen die Entwickler in der Dokumentation von Pyinfra. Eine Bereitstellung wird zum Beispiel folgendermaßen erstellt:

# Import pyinfra modules, each containing operations to use
from pyinfra.modules import files

# Ensure the state of a user
files.directory(
   'my_directory',
   sudo=True,
)

Die Befehle werden anschließend zum Beispiel in der Datei „deploy.py“ gespeichert. Um die Bereitstellung durchzuführen, wird zum Beispiel folgender Befehl gestartet:

pyinfra my-server.net deploy.py

Operationen sind Aktionen, die für Systeme im Inventory durchgeführt werden. Operationen legen den Zustand eines Systems fest, den Pyinfra anpassen soll. Wenn ein System nicht den Definitionen entspricht, die in Pyinfra festgelegt sind, führt der Server die Änderungen durch.

Die Vorgehensweise dazu ist ebenfalls in der Hilfe zu Pyinfra zu sehen. Der aktuelle Zustand eines Hosts wird mit „Facts“ definiert. Operationen legen fest, wie Ziel-Hosts vom aktuellen Zustand zum gewünschten Zustand wechseln sollen. Hier wird also gesteuert, welche App oder welcher Dienst installiert werden soll.

Bereitstellungen über CLI und API

Bereitstellungen mit Pyinfra müssen natürlich nicht mit der CLI und Python-Befehlen erfolgen, sondern können natürlich auch problemlos mit Python-Programmen über die API in Pyinfra durchgeführt werden. Unabhängig davon, wie die Bereitstellung erfolgt, verbindet sich Pyinfra mit dem jeweiligen Ziel-Host und führt danach Operationen aus.

Die Operationen werden über das Netzwerk mit einer SSH-Verbindung durchgeführt. Auf den Servern selbst muss dazu kein Daemon installiert sein. Für die Verbindung zu den Hosts wird ein Inventory verwendet. Dieses legt fest, mit welchen Hosts Pyinfra eine Verbindung aufbauen soll.

Fazit

Pyinfra ist vor allem für Linux-Umgebungen interessant – oder in Umgebungen, in denen zu großen Teilen auf Python gesetzt wird. Durch die Möglichkeit, per API auf Pyinfra zuzugreifen, können Entwickler eigene Programme zur Verfügung stellen, die mithilfe der Pyinfra-Funktionen Anwendungen zentral im Netzwerk zur Verfügung zu stellen.

Generell ist Pyinfra aktuell noch nicht unbedingt für produktive Umgebungen geeignet, sondern vor allem für Test-Szenarien oder Infrastrukturen, die mit Python arbeiten und eine Lösung für die Bereitstellung von Apps und Diensten suchen. In der Dokumentation erhalten Entwickler und Administratoren grundlegende Hilfe und Beispiele für die Bereitstellung.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 44997823 / Installation & Rollout)