Ausführen von verschachtelten Aufrufen mit Pythons Fabric-Bibliothek

9

Pythons Fabric bietet die Möglichkeit, Fabric-Funktionen außerhalb des Dienstprogramms fab mit der Funktion execute aufzurufen. Ein kontextabhängiges Problem tritt auf, wenn eine execute -Funktion innerhalb einer anderen Funktion aufgerufen wird, die mit execute aufgerufen wurde. Fabric verliert den Kontext der äußeren Ausführung, wenn die innere Ausführung aufgerufen wird, und stellt sie nie wieder her. Zum Beispiel:

%Vor%

Nach dem ersten Aufruf von execute verliert Fabric vollständig seinen Kontext und führt alle weiteren Befehle innerhalb der Funktion deploy_code mit host_string='lb1' anstelle von 'web1' aus. Wie kann ich mich daran erinnern?

Ich habe mir diesen Hack ausgedacht, aber ich glaube, er könnte bei zukünftigen Releases brechen:

%Vor%

Dies speichert effektiv alle Zustände und stellt sie nach dem Aufruf wieder her, scheint aber eine unbeabsichtigte Verwendung der Funktion zu sein. Gibt es eine bessere Möglichkeit, Fabric mitzuteilen, dass es sich um eine geschachtelte Ausführung handelt, und um einen Einstellungsstapel oder eine äquivalente Methode zum Erinnern des Status zu verwenden?

Danke!

    
adowds 19.01.2012, 03:11
quelle

1 Antwort

1

Sie verwenden das Material nicht richtig. Wie du gerade fab deploy_code aufrufen würdest, anstatt die Fabfile wie Python auszuführen. Ich würde vorschlagen, dass Sie das Tutorial durchgehen, um eine bessere Idee zu bekommen, wie Sie Ihre Fabfile strukturieren können.

Wie auch immer, Sie können hier für die Verwendung von execute() und hier für mehr der Besonderheiten.

Sie haben einen Tippfehler darin, dass Sie das "s" aus der Rolle des Webservers entfernt haben. Dies kann dazu führen, dass Sie keine gute Host-Zeichenfolge haben, wenn Sie es bei der zweiten Aufgabe möchten.

Aber abgesehen davon können Sie auch Rollen und Hosts im Befehl execute () selbst setzen.

    
Morgan 17.04.2012 09:03
quelle

Tags und Links