Schauen wir uns zunächst ein Beispiel an. Wir wissen, dass unter *NIX der Befehl uname
dazu dient, die Release-Version des Systems anzuzeigen.
Sie können ein Fabric-Skript wie folgt schreiben:
from fabric.api import run def host_type(): run('uname -s')
Speichern Sie das obige Skript als fabfile.py, und Sie können das host_type-Skript auf mehreren Hosts über den fab
-Befehl ausführen:
$ fab -H localhost,linuxbox host_type [localhost] run: uname -s [localhost] out: Darwin [linuxbox] run: uname -s [linuxbox] out: Linux
Möglicherweise müssen Sie während der Ausführung Ihr Systempasswort eingeben.
Installation
Wenn Sie dies sehen, bedeutet das, dass Sie sich für Fabric interessieren. Die oben genannten Vorgänge können auf Ihrer Site jedoch nicht ausgeführt werden, da Sie Fabric nicht installiert haben. Die Installation von Fabric ist sehr einfach. Sie können pip
oder easy_install
verwenden oder den Originalcode zur Installation herunterladen.
Aufgabenfunktion
Sehr gut, die Installation von Fabric ist für Sie nicht schwierig. Vielleicht haben Sie die vorherigen Aufgaben erfolgreich erledigt, jetzt gehen wir etwas tiefer.
Die Aufgabe in Fabric ist eine Python-Funktion, nennen wir sie „Aufgabenfunktion“. Da es sich um eine Python-Funktion handelt, gelten einige Funktionen auch für Aufgabenfunktionen. Zum Beispiel Parameter übergeben, sich gegenseitig aufrufen, Werte zurückgeben usw.
Sehen Sie sich zunächst ein Beispiel für die Übergabe von Parametern an:
def hello(name="world"): print("Hello %s!" % name)
Beim Ausführen einer Aufgabe können Sie Parameter über die Befehlszeilenparameter von fab
an die Aufgabenfunktion übergeben:
$ fab hello:name=Holbrook Hello Holbrook!
Beispiele für kombinierte Aufgaben sind wie folgt:
from fabric.api import run def host_type(): run('uname -s') def hello(name="world"): print("Hello %s!" % name) def composite(name="world"): hello(name) host_type()
Von Fabric bereitgestellte Befehle
Wir haben die Funktion run
bereits früher im Modul fabric.api gesehen. Ihre Funktion besteht darin, Befehle auf dem Remote-Host auszuführen. Die lokale Funktion wird auch in fabric.api bereitgestellt, um lokale Befehle (den Host, auf dem sich die Fabric befindet) auszuführen.
lautet wie folgt:
from fabric.api import local def lslocal(): local('ls')
Ähnlich wie Remote-Befehle und lokale Befehle unterscheidet Fabric auch zwischen Remote-Verzeichnissen und lokalen Verzeichnissen. Die von Fabric für Remote- und lokale Verzeichnisse bereitgestellten Vorgänge sind cd bzw. lcd. Dies ist leicht zu verstehen, wenn Sie Befehlszeilen-FTP verwendet haben.
Sehen wir uns ein Beispiel an:
def filepath(): remote_dir = '/opt/xxx' with cd(remote_dir): run("touch README")
Die Funktion des obigen Codes besteht darin, das Remote-Verzeichnis /opt/xxx aufzurufen und eine README-Datei zu erstellen.
Fabric bietet auch viele Befehle, z. B. Dateioperationen.
Serververbindung verwalten
In den vorherigen Beispielen müssen Sie den Server in den Fab-Befehlszeilenparametern angeben. Es ist problematisch, wenn Sie eine große Anzahl von Servern verwalten müssen. Fabric stellt eine Wörterbuchumgebung mit Umgebungsvariablen bereit, die Hosts-Wörterbuchelemente enthält, die den Server definieren können, der verbunden werden muss.
lautet wie folgt:
from fabric.api import env, run env.hosts = ['host1', 'host2'] def mytask(): run('ls /var/www')
Sie können auch die Hostliste angeben, um die Aufgabe für jede Aufgabe separat auszuführen:
from fabric.api import env, run def set_hosts(): env.hosts = ['host1', 'host2'] def mytask(): run('ls /var/www')
Wenn Sie fab set_hosts mytask
auf diese Weise ausführen, können Sie die set_hosts
-Aufgabe für die beiden in host
angegebenen mytask
ausführen. Wenn Sie zu faul sind, eine Funktion zu schreiben, ist die Angabe in der fab
-Befehlszeile dasselbe:
fab mytask:hosts="host1;host2"
Um Batch-Aufgaben bequemer ausführen zu können, ist Role auch in Fabric definiert. Wenn Sie interessiert sind, können Sie die offizielle Dokumentation lesen.
SSH-Passwörter, Benutzer, Ports verwalten
Obwohl die Verwendung der SSH-Authentifizierung mit öffentlichem Schlüssel empfohlen wird, bietet Fabric dennoch einen Mechanismus zur Verwaltung von Passwörtern. Fabric bietet zwei Ebenen von Passwörtern.
Wenn Ihre Server dasselbe Passwort haben, können Sie in env.password
ein Standardpasswort festlegen. Wenn die Serverpasswörter unterschiedlich sind, können Sie in env.passwords
auch ein (Host-, Passwort-)Paar festlegen, um ein separates Passwort festzulegen SSH-Passwort für jeden Server.
Die obige Hostzeichenfolge hat dieses Format: Benutzername@Hostname:Port. Daher wird bei der Angabe des SSH-Passworts auch der SSH-Benutzer angegeben. Wie bei Passwörtern können Sie auch in env.user
einen Standardbenutzer angeben. Wenn keines von beiden angegeben ist, werden Sie beim Ausführen des Befehls fab
zur Eingabe des Passworts aufgefordert.
Mit Fabric können Sie SSH-Verbindungen einer Reihe von Hosts verwalten (einschließlich Hostnamen, Benutzer, Passwörter), eine Reihe von Aufgabenfunktionen definieren und dann flexibel angeben, welche Aufgaben auf welchen Hosts ausgeführt werden sollen. Dies ist sehr nützlich in Szenarien, in denen eine große Anzahl von Hosts verwaltet werden muss, z. B. Betrieb und Wartung, private Cloud-Verwaltung, automatisierte Anwendungsbereitstellung usw.
Zusammenfassung
Dieser Artikel ist nur ein Einführungsdokument, das bei weitem nicht die Leistungsfähigkeit von Fabric widerspiegelt. Tatsächlich umfasst Fabric auch eine große Anzahl von Funktionen, wie z. B. Rollendefinition, Remote-Interaktion und Ausnahmebehandlung, gleichzeitige Ausführung, Dateioperationen usw., und ist nicht auf die Befehlszeilenmethode beschränkt, die in Ihrer Anwendung aufgerufen werden kann.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels Ihr Interesse an Fabric wecken und Probleme in Ihren praktischen Anwendungen lösen kann. Wenn Sie Fragen haben, können Sie zur Kommunikation eine Nachricht hinterlassen.