Wenn ich eine Aufgabe definiere, die auf mehreren Remoteservern ausgeführt werden soll, wenn Fabric auf Server 1 ausgeführt wird und mit einem Fehler beendet wird, stoppt Fabric die Aufgabe und bricht sie ab. Aber ich möchte, dass Fabric den Fehler ignoriert und die Aufgabe auf dem nächsten Server ausführt. Wie kann ich das schaffen?
Beispielsweise:
$ fab site1_service_gw
[site1rpt1] Executing task 'site1_service_gw'
[site1fep1] run: echo 'Nm123!@#' | sudo -S route
[site1fep1] err:
[site1fep1] err: We trust you have received the usual lecture from the local System
[site1fep1] err: Administrator. It usually boils down to these three things:
[site1fep1] err:
[site1fep1] err: #1) Respect the privacy of others.
[site1fep1] err: #2) Think before you type.
[site1fep1] err: #3) With great power comes great responsibility.
[site1fep1] err: root's password:
[site1fep1] err: sudo: route: command not found
Fatal error: run() encountered an error (return code 1) while executing 'echo 'Nm123!@#' | sudo -S route '
Aborting.
from fabric.api settings
Ab Fabric 1.5 gibt es einen ContextManager, der dies einfacher macht:
Update: Ich habe erneut bestätigt, dass dies in Ipython mit dem folgenden Code funktioniert.
quelle
with hide('everything'):
Sie können auch festlegen, dass die Einstellung warn_only des gesamten Skripts mit true übereinstimmt
quelle
Sie sollten die einstellen
abort_exception
Umgebungsvariable und die Ausnahme abfangen.Beispielsweise:
Sie können es auch in einen with-Block setzen. Siehe die Dokumentation hier .
quelle
fabric.api.env
in deinemexcept
Block überprüfen ?env.abort_exception=MyException
damit ich meinen eigenen Fehler ausführen kann. Es funktioniert irgendwie, wenn ich eine Funktion anstelle einer Klasse verwende (erfüllt die aufrufbare Anforderung fürabort_exception
), aber ich arbeite immer noch an einigen anderen Problemen mit diesem Ansatz.fabric.api.env
ist.Zumindest in Fabric 1.3.2 können Sie die Ausnahme wiederherstellen, indem Sie die Ausnahme abfangen
SystemExit
. Dies ist hilfreich, wenn Sie mehr als einen Befehl in einem Stapel ausführen müssen (z. B. eine Bereitstellung) und bereinigen möchten, wenn einer von ihnen fehlschlägt.quelle
SystemExit
Nachricht oder den Code des Codes auf weitere Details überprüfen .SystemExit
, setzen Sieabort_exception
eine andere Ausnahme, damit Sie nicht versehentlich Ausnahmen fangen, die nichts mit Fabric zu tun haben. Siehe meine Antwort für ein Beispiel: stackoverflow.com/a/27990242/901641In Stoff 2.x Sie nur verwenden können invoke s‘ laufen mit dem warnen = True Argument. Auf jeden Fall ist invoke eine Abhängigkeit von Fabric 2.x :
Aus einer Aufgabe heraus:
quelle
In meinem Fall auf Fabric> = 1.4 diese Antwort die richtige.
Sie können schlechte Hosts überspringen, indem Sie Folgendes hinzufügen:
Oder die
--skip-bad-hosts
Flagge übergeben /quelle