[PYTHON] Wenn Sie den Ausführungsbenutzer mitten in einer Fabric-Aufgabe wechseln möchten, stellen Sie den Kontextmanager ein

Ich möchte den Ausführungsbenutzer in einer Aufgabe wechseln

Mit einem Kontextmanager namens Fabric.api.settings können Sie arbeiten, während Sie die Ausführungsbenutzer mitten in einer bestimmten Aufgabe wechseln.

Zum Beispiel

  1. Ziehen Sie aus github --www Arbeiten als Benutzer
  2. Starten Sie Nginx, Supervisord neu - arbeiten Sie als Administrator

Wenn Sie eine solche Aufgabe erstellen möchten, schreiben Sie den folgenden Code.

operationwithswitchinguser.py


from fabric.api as fb
import cuisine as cs


def refresh(branch="origin/master", restart="yes"):
    with fb.settings(
        cs.mode_user(),
        user="www",
        secretkey="./fixtures/id_rsa",
    ):
        with fb.cd("/home/www/repo"):
            cs.run("git fetch")
            cs.run("git checkout %s" % branch)

    if restart == "yes":
        with fb.settings(
            cs.mode_sudo(),
            user="admin",
            secretkey="./fixtures/id_rsa",
        ):
            cs.run("/etc/init.d/nginx restart")
            cs.run("/etc/init.d/supervisord restart")

Einstellungen Informationen zum Kontextmanager

Einstellungen Kontextmanager

Es hat solche Spezifikationen. Mit anderen Worten

with fb.settings(
    cs.mode_user(),
    user="www",
    secretkey="./fixtures/id_rsa",
):

Wenn Sie Code wie diesen schreiben

  1. Führen Sie zuerst einen Sudo / Normal-Modus-Wechsel der Küche durch.
  2. Setzen Sie den Benutzer- / öffentlichen Schlüssel von env auf www, ./fixtures/id_rsa

Es bewegt sich so.

Impressionen

Ich wünschte, ich hätte diese Spezifikation früher bemerkt. Weil ich mich damit verschwendet habe, einen Dekorateur für den Benutzerwechsel zu schreiben.

Recommended Posts

Wenn Sie den Ausführungsbenutzer mitten in einer Fabric-Aufgabe wechseln möchten, stellen Sie den Kontextmanager ein
Ich möchte einen Lebenszyklus in der Aufgabendefinition von ECS festlegen
Definieren Sie eine Aufgabe zum Festlegen der Fabric-Umgebung in YAML
Wenn Sie einer Variablen in Python einen CSV-Export zuweisen möchten
[Django] Was tun, wenn das zu erstellende Modell viele Felder enthält?
Ich möchte eine Liste in der Reihenfolge anderer Listen sortieren
[Python] Wenn Sie ein Streudiagramm mehrerer Cluster zeichnen möchten
Ich möchte komplizierte vier Regeln in der IF-Anweisung der Django-Vorlage verwenden! → Verwenden Sie eine benutzerdefinierte Vorlage
So geben Sie mit Jupyter Notebook einen Wert in der Mitte einer Zelle aus
Wenn Sie Word Cloud erstellen möchten.
Ich habe einen Appdo-Befehl erstellt, um Befehle im Kontext der App auszuführen
Ich möchte eine Liste der WebDAV-Dateien im Modul Anfragen anzeigen
Was ist die letzte Programmiersprache, die Sie in Ihrem Leben lernen? (Wenn Sie einen Club mit einem lebenslangen Gehalt von 300 Millionen Yen einholen möchten)
Wenn Sie eine Methode in einer Ruby-Klasse definieren und dann eine Methode darin definieren, wird sie zu einer Methode der ursprünglichen Klasse.
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
Eine Geschichte über den Versuch, Linter mitten in einem Python (Flask) -Projekt vorzustellen
Ich möchte das Ausführungsergebnis von strace erfassen
Wenn Sie in der for-Anweisung plt.save möchten
Wenn Sie ein Argument in die Abschlussfunktion einfügen und später ausführen möchten
Übergeben des Ausführungsergebnisses eines Shell-Befehls in einer Liste in Python (nicht blockierende Version)
Wenn Sie möchten, dass Ihre Kollegen dieselbe Sprache verwenden
So schreiben Sie, wenn Sie eine Zahl nach der Gruppennummer setzen möchten, die durch einen regulären Ausdruck in Python ersetzt werden soll
Was tun, wenn Sie "locale.Error: nicht unterstützte Gebietsschemaeinstellung" erhalten, wenn Sie den Tag vom Datum in Python abrufen?
So machen Sie einen Screenshot des Chrome-Bildschirms (verhindern Sie, dass er in der Mitte abgeschnitten wird)
[Django] Erklären Sie den Fluchtweg sorgfältig, wenn Sie die Tabelle einer anderen Anwendung wirklich verwenden möchten
Ich möchte mit matplotlib ein Diagramm mit Wellenlinien in der Mitte erstellen (ich möchte den Eindruck manipulieren).
Ich möchte die Ausführungszeit aufzeichnen und ein Protokoll führen.
Wenn Sie Datenwissenschaftler werden möchten, beginnen Sie mit Kaggle
[sh] Das Speichern der Befehlsausführung führt zu Variablen
So bestimmen Sie die Existenz eines Selenelements in Python
[Linux] Ich möchte das Datum wissen, an dem sich der Benutzer angemeldet hat
Was tun, wenn in Python minus Null angezeigt wird?
So überprüfen Sie die Speichergröße einer Variablen in Python
Wenn Sie eine Liste mit dem Standardargument der Funktion angeben ...
Benachrichtigen Sie den Inhalt der Aufgabe vor und nach der Ausführung der Aufgabe mit Fabric
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
[Python3] Definition eines Dekorators, der die Ausführungszeit einer Funktion misst
So ermitteln Sie die Scheitelpunktkoordinaten eines Features in ArcPy
Überprüfen Sie, ob Sie in Python eine Verbindung zu einem TCP-Port herstellen können
Was tun, wenn Sie den Papierkorb in Lubuntu 18.04 nicht verwenden können?
Erstellen Sie eine Funktion, um den Inhalt der Datenbank in Go abzurufen
Ich möchte die Bevölkerung jedes Landes der Welt kennenlernen.
[NNabla] So entfernen Sie die mittlere Ebene eines vorgefertigten Netzwerks
Beachten Sie, dass Sie die im Django-Vorlagenformular übergebenen Parameter Element für Element manuell dekorieren möchten
Wenn Sie nur die Dump-Datei des Servers abrufen möchten, war es praktisch, einen http-Server zu erstellen
[AtCoder für Anfänger] Sprechen Sie über den Rechenaufwand, den Sie grob wissen möchten
Wenn Sie awsebcli in CircleCI aufnehmen möchten, geben Sie die Python-Version an
Python Hinweis: Wenn Sie die Attribute eines Objekts kennen möchten
[Linux] Ein Befehl zum Abrufen einer Liste der in der Vergangenheit ausgeführten Befehle
So vergleichen Sie, ob der Inhalt der Objekte in scipy.sparse.csr_matrix identisch ist
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
Ich möchte die abstrakte Klasse (ABCmeta) von Python im Detail erklären
Wenn Sie den HTTP-Header des Testclients von Flask ändern möchten
[NNabla] Hinzufügen einer Quantisierungsschicht zur mittleren Schicht eines trainierten Modells
Wenn Sie mehrere Statistiken mit groupby of pandas v1 erhalten möchten
Ich möchte einen Teil der Excel-Zeichenfolge mit Python einfärben
Wenn Sie Wörter in Python zählen möchten, können Sie bequem Counter verwenden.