[PYTHON] Résumé lors de l'utilisation de Fabric

Résumé des recherches sur l'introduction de Fabric dans le système en cours de visualisation. Décrit en référence au Document officiel. Il semble y avoir beaucoup de choses que vous pouvez faire, mais vous ne pouvez prendre le relais que si vous restez simple, il s'agit donc de ce qui suit. La version que j'ai essayée est la suivante.

L'exécution simple est exécutée dans le format suivant

fab -nom de fichier f-H nom d'hôte-u méthode d'exécution du nom d'utilisateur

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

Description de base

fab_test.py


from fabric.api import *

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

Contenu de la commande

get Copiez le fichier localement à partir du serveur cible. Vérifiez la valeur de retour .succeeded pour voir si elle a réussi. .failed semble stocker une liste de chemins de fichiers en cas d'échec.

get("Chemin du serveur distant","Chemin local")
r = get('/home/foo/hoge', './')
print(r.succeeded) # =>Si c'est vrai, cela réussit. Échec si faux
print(r.failed)

put Copiez le fichier du serveur local vers le serveur cible.

put('Chemin du serveur local','Chemin du serveur distant')
r = put('./hoge',"/home/foo")
print(r.succeeded) # =>Si c'est vrai, cela réussit. Échec si faux

local Exécutez la commande sur le serveur local.

local("pwd")

run Exécutez la commande sur le serveur distant. L'utilisateur qui exécute est l'utilisateur qui a accédé.

run("whoami")

sudo sudo et exécutez la commande. Il échouera si l'utilisateur accédant ne dispose pas des privilèges sudo.

sudo("whoami")

Il est également possible de spécifier l'utilisateur d'exécution en décrivant comme suit.

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

open_shell Migrez vers le shell du serveur distant et exécutez la commande. Passez à interactif tel qu'il est.

open_shell("ls")

prompt Accepte les entrées des invites utilisateur. Il semble que la validation soit également possible. Lorsque j'ai entré une chaîne de caractères pour le type int, une exception s'est produite, il semble donc préférable de la valider avec une expression régulière.

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+)?$')
        

avec cd ("XX"): ou avec préfixe ("YY"):

Préfixez toutes les commandes avec cd XX && ou YY &&. Je ne pouvais pas mettre su-devant le préfixe, utilisez donc les paramètres mentionnés ci-dessus.

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

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

coloration

Les couleurs peuvent être ajoutées en décrivant comme suit. Il semble facile de comprendre si vous colorez le succès ou l'échec. Il est nécessaire de vérifier s'il sera coloré avec Teraterm.

from fabric.colors import *

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

Les couleurs sont les suivantes.

rouleau

Exécutez la méthode uniquement sur le serveur du rôle cible.

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 ")

L'exécution est la suivante. Dans ce qui précède, @roles ('web') est décrit avant la méthode, donc -R web peut être omis au moment de l'exécution.

fab -f Fichier d'exécution[-Rouleau R] task
fab -f fab_test.py -u ubuntu restart_nginx

Assurez-vous que le résultat est une erreur

Il y avait une procédure appelée "Fichier manquant" dans la procédure, et quand j'ai créé un script comme je l'ai fait manuellement, cela s'est arrêté là. Cela peut être évité en entrant warn_only = True comme indiqué ci-dessous.

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

[Autres sites qui peuvent être utiles] https://blog.masu-mi.me/2015/04/11/fabric_tips.html

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

Recommended Posts

Résumé lors de l'utilisation de Fabric
Précautions lors de l'utilisation de Chainer
Résumé du document lors de l'utilisation de Cloud Firestore à partir de Java
Résumé des choses qui étaient pratiques lors de l'utilisation de pandas
Points (personnels) lors de l'utilisation de ctypes
Variables d'environnement lors de l'utilisation de Tkinter
Lors de l'utilisation d'optparse avec iPython
Paramètres de DEBUG lors de l'utilisation de Django
Lors de l'utilisation si et lors de l'utilisation pendant
Structure de fichier lors de l'utilisation d'exigences python sans serveur
Utilisez configparser lors de l'utilisation de l'API
Générer une image Docker à l'aide de Fabric
Un mémorandum lors de l'utilisation d'une belle soupe
Portée variable lors de l'utilisation des fonctions internes
Contre-mesures contre le proxy lors de l'utilisation de l'API WEB
Récapitulatif si vous utilisez AWS Lambda (Python)
Résumé de phrase utilisant BERT [pour les parents]
Précautions lors de l'utilisation de l'analyse des traits TextBlob
Déployer un script sur jboss à l'aide de fabric
Précautions lors de l'utilisation de codecs et de pandas
Précautions lors de l'utilisation de la fonction urllib.parse.quote
Tweet Récapitulatif WakaTime à l'aide d'AWS Lambda
[Python] Soyez prudent lorsque vous utilisez print
Précautions lors de l'utilisation de phantomjs de python
ResourceWarning lors de l'utilisation de requêtes: solution de contournement non fermée
Lors de l'utilisation de MeCab avec python dans virtualenv
Précautions lors de l'utilisation de six avec Python 2.5
Lors de l'utilisation d'expressions régulières en Python
en tissu
Connaissance lors de la création d'un bot en utilisant discord.py
Traitement d'exécution périodique lors de l'utilisation de tkinter [Python3]
Ce que je suis entré lors de l'utilisation de Tensorflow-gpu
Notes de traitement habituelles lors de l'utilisation de Google Colaboratory
Ce que Rubyist doit savoir lors de l'utilisation de pyenv
Placement de Fabicon (lors de l'utilisation de Python, Flask, Heroku)
[python, multitraitement] Comportement des exceptions lors de l'utilisation du multitraitement
Précautions lors de l'utilisation de l'instruction for dans les pandas
Paramètres de base de données lors de l'utilisation de Django + SQLAlchemy + Alembic
Résumé de l'extrait de code lors du développement avec Go
Avertissement lors de l'utilisation de TensorFlow sur Mac