Heim  >  Artikel  >  Backend-Entwicklung  >  So automatisieren Sie Ihre Aufgaben mit Fabric

So automatisieren Sie Ihre Aufgaben mit Fabric

WBOY
WBOYOriginal
2016-12-05 13:27:121025Durchsuche

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.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn