[PYTHON] Zusammenfassung bei Verwendung von Fabric

Zusammenfassung der Forschungsergebnisse zur Einführung von Fabric in das derzeit betrachtete System. Beschrieben unter Bezugnahme auf Offizielles Dokument. Es scheint, dass verschiedene Dinge getan werden können, aber es kann nicht übernommen werden, wenn es nicht vereinfacht wird. Es geht also um Folgendes. Die Version, die ich ausprobiert habe, ist wie folgt.

Die einfache Ausführung wird im folgenden Format ausgeführt

fab -f Dateiname-H Hostname-u Ausführungsmethode für den Benutzernamen

Beispiel: fab-f fab_test.py -H 192.168.1.10 -u ubuntu task_name

Grundlegende Beschreibung

fab_test.py


from fabric.api import *

def task_name():
  run("whoami")
  sudo("whoami")
  with cd("/tmp"):
    run("pwd")

Befehlsinhalt

get Kopieren Sie die Datei lokal vom Zielserver. Überprüfen Sie den Rückgabewert .succeeded, um festzustellen, ob er erfolgreich war. .failed scheint im Fehlerfall eine Liste von Dateipfaden zu speichern.

get("Remote-Server-Pfad","Lokaler Pfad")
r = get('/home/foo/hoge', './')
print(r.succeeded) # =>Wenn True, ist es erfolgreich. Fehlschlagen, wenn falsch
print(r.failed)

put Kopieren Sie die Datei vom lokalen auf den Zielserver.

put('Lokaler Serverpfad','Remote-Server-Pfad')
r = put('./hoge',"/home/foo")
print(r.succeeded) # =>Wenn True, ist es erfolgreich. Fehlschlagen, wenn falsch

local Führen Sie den Befehl auf dem lokalen Server aus.

local("pwd")

run Führen Sie den Befehl auf dem Remote-Server aus. Der Benutzer, der ausgeführt wird, ist der Benutzer, auf den zugegriffen wurde.

run("whoami")

sudo sudo und führe den Befehl aus. Es schlägt fehl, wenn der zugreifende Benutzer keine Sudo-Berechtigungen hat.

sudo("whoami")

Es ist auch möglich, den Ausführungsbenutzer anzugeben, indem Folgendes beschrieben wird.

with settings(sudo_user='mysql'):
    sudo("whoami") # prints 'mysql'

open_shell Migrieren Sie zur Remote-Server-Shell und führen Sie den Befehl aus. Wechseln Sie zu interaktiv wie es ist.

open_shell("ls")

prompt Akzeptiert Eingaben von Benutzeransagen. Es scheint, dass auch eine Validierung möglich ist. Als ich eine Zeichenfolge für den Typ int eingegeben habe, ist eine Ausnahme aufgetreten. Es scheint daher besser, sie mit einem regulären Ausdruck zu überprüfen.

r = prompt("run command ?")
run(r)

# With validation, i.e. requiring integer input:
prompt('Please specify process nice level: ', key='nice', validate=int)

# With validation against a regular expression:
release = prompt('Please supply a release name',
        validate=r'^\w+-\d+(\.\d+)?$')
        

mit CD ("XX"): oder mit Präfix ("JJ"):

Stellen Sie allen Befehlen "cd XX &&" oder "YY &&" voran. Ich konnte su-nicht vor das Präfix setzen, also benutze die oben genannten Einstellungen.

with cd("/etc"):
  run("cat hosts")

with prefix("cd /etc"):
  run("cat hosts")

Färbung

Farben können durch Beschreibung wie folgt hinzugefügt werden. Es scheint leicht zu verstehen, ob Sie den Erfolg oder Misserfolg färben. Es muss überprüft werden, ob es mit Teraterm gefärbt wird.

from fabric.colors import *

print(red("This sentence is red, except for " +   
        green("these words, which are green") + "."))

Die Farben sind wie folgt.

rollen

Führen Sie die Methode nur auf dem Server der Zielrolle aus.

from fabric.api import env

env.roledefs = {
    'web': ['192.168.1.10', '192.168.1.11', '192.168.1.12']
}

@roles('web')
def restart_nginx():
  sudo("service nginx restart ")

Die Ausführung ist wie folgt. Oben wird @roles ('web') vor der Methode beschrieben, sodass -R web zur Laufzeit weggelassen werden kann.

fab -f Ausführungsdatei[-R Rolle] task
fab -f fab_test.py -u ubuntu restart_nginx

Stellen Sie sicher, dass das Ergebnis ein Fehler ist

Es gab eine Prozedur mit dem Namen "Datei fehlt" in der Prozedur, und als ich ein Skript wie manuell erstellt habe, wurde es dort gestoppt. Sie können dies vermeiden, indem Sie wie unten gezeigt "warn_only = True" eingeben.

with settings(warn_only=True):
  result = sudo("ls -l /not/found/path")

[Andere Websites, die hilfreich sein können] https://blog.masu-mi.me/2015/04/11/fabric_tips.html

http://perezvon.hatenablog.com/entry/20091026/1256552181

Recommended Posts

Zusammenfassung bei Verwendung von Fabric
Vorsichtsmaßnahmen bei der Verwendung von Chainer
Dokumentzusammenfassung bei Verwendung von Cloud Firestore aus Java
Zusammenfassung der Dinge, die bei der Verwendung von Pandas praktisch waren
(Persönliche) Punkte bei Verwendung von ctypes
Umgebungsvariablen bei Verwendung von Tkinter
Bei Verwendung von optparse mit iPython
DEBUG-Einstellungen bei Verwendung von Django
Bei Verwendung von if und bei Verwendung von while
Dateistruktur bei Verwendung von Serverless-Python-Anforderungen
Verwenden Sie configparser, wenn Sie die API verwenden
Generieren Sie ein Docker-Image mit Fabric
Ein Memorandum bei der Verwendung von schöner Suppe
Variabler Umfang bei Verwendung interner Funktionen
Gegenmaßnahmen gegen Proxy bei Verwendung der WEB-API
Zusammenfassung bei Verwendung von AWS Lambda (Python)
Satzzusammenfassung mit BERT [für Verwandte]
Vorsichtsmaßnahmen bei der Verwendung der TextBlob-Merkmalsanalyse
Stellen Sie das Skript mithilfe von Fabric für jboss bereit
Vorsichtsmaßnahmen bei der Verwendung von Codecs und Pandas
Vorsichtsmaßnahmen bei Verwendung der Funktion urllib.parse.quote
Tweet WakaTime Zusammenfassung mit AWS Lambda
[Python] Seien Sie vorsichtig, wenn Sie Druck verwenden
Vorsichtsmaßnahmen bei der Verwendung von Phantomjs aus Python
ResourceWarning bei Verwendung von Anforderungen: nicht geschlossene Problemumgehung
Bei Verwendung von MeCab mit virtualenv python
Vorsichtsmaßnahmen bei Verwendung von sechs mit Python 2.5
Bei Verwendung regulärer Ausdrücke in Python
Stoff
Kenntnisse beim Erstellen eines Bots mit discord.py
Periodische Ausführungsverarbeitung bei Verwendung von tkinter [Python3]
Worauf ich mich bei der Verwendung von Tensorflow-gpu eingelassen habe
Übliche Verarbeitungshinweise bei Verwendung von Google Colaboratory
Was Rubyist bei der Verwendung von Pyenv wissen sollte
Platzierung von Fabicon (bei Verwendung von Python, Flask, Heroku)
[Python, Multiprocessing] Verhalten für Ausnahmen bei Verwendung von Multiprocessing
Vorsichtsmaßnahmen bei Verwendung der for-Anweisung in Pandas
DB-Einstellungen bei Verwendung von Django + SQLAlchemy + Alembic
Snippet-Zusammenfassung bei der Entwicklung mit Go
Warnung bei Verwendung von TensorFlow auf einem Mac