[PYTHON] Si vous souhaitez changer d'utilisateur d'exécution au milieu d'une tâche Fabric, le gestionnaire de contexte des paramètres

Je souhaite changer d'utilisateur d'exécution dans une tâche

Un gestionnaire de contexte appelé fabric.api.settings vous permet de travailler tout en changeant d'utilisateur d'exécution au milieu d'une tâche donnée.

Par exemple

  1. Tirez depuis github --www Travailler en tant qu'utilisateur
  2. redémarrez nginx, supervisord - travaillez en tant qu'administrateur

Si vous souhaitez créer une telle tâche, écrivez le code suivant.

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

paramètres À propos du gestionnaire de contexte

gestionnaire de contexte de paramètres

Il a de telles spécifications. En d'autres termes

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

Si vous écrivez un code comme celui-ci

  1. Commencez par changer de cuisine en mode sudo / normal.
  2. Définissez la clé utilisateur / publique d'environnement sur www, ./fixtures/id_rsa

Ça bouge comme ça.

Impressions

J'aurais aimé avoir remarqué cette spécification plus tôt. Je me perdais à écrire un décorateur pour le changement d'utilisateur.

Recommended Posts

Si vous souhaitez changer d'utilisateur d'exécution au milieu d'une tâche Fabric, le gestionnaire de contexte des paramètres
Je souhaite définir un cycle de vie dans la définition de tâche d'ECS
Définir une tâche pour définir l'environnement de fabric dans YAML
Si vous souhaitez affecter une exportation csv à une variable en python
[Django] Que faire quand il y a de nombreux champs dans le modèle que vous souhaitez créer
Je souhaite trier une liste dans l'ordre des autres listes
[Python] Si vous souhaitez dessiner un diagramme de dispersion de plusieurs clusters
Je veux utiliser quatre règles compliquées dans l'instruction IF du modèle Django! → Utilisez un modèle personnalisé
Pour générer une valeur au milieu d'une cellule avec Jupyter Notebook
Si vous souhaitez créer Word Cloud.
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
Je souhaite voir une liste de fichiers WebDAV dans le module Requêtes
Quel est le dernier langage de programmation que vous apprenez dans votre vie? (Si vous voulez rattraper un club avec un salaire à vie de 300 millions de yens)
Si vous définissez une méthode dans une classe Ruby, puis définissez une méthode dans celle-ci, elle devient une méthode de la classe d'origine.
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Une histoire sur la tentative d'introduire Linter au milieu d'un projet Python (Flask)
Je veux grep le résultat de l'exécution de strace
Lorsque vous voulez plt.save dans l'instruction for
Si vous voulez mettre un argument dans la fonction de fermeture et l'exécuter plus tard
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python (version non bloquante)
Si vous souhaitez que vos collègues utilisent la même langue
Comment écrire quand on veut mettre un nombre après le numéro de groupe à remplacer par une expression régulière dans re.sub de Python
Que faire si vous obtenez `locale.Error: unsupported locale setting` lors de l'obtention de la date du jour en Python
Comment prendre une capture d'écran de l'écran Chrome (l'empêcher de se couper au milieu)
[Django] Expliquez soigneusement la voie d'échappement si vous voulez vraiment utiliser la table d'une autre application
Je veux créer un graphique avec des lignes ondulées au milieu avec matplotlib (je veux manipuler l'impression)
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
Si vous souhaitez devenir data scientist, commencez par Kaggle
[sh] Comment stocker les résultats de l'exécution de la commande dans des variables
Comment déterminer l'existence d'un élément sélénium en Python
[Linux] Je souhaite connaître la date à laquelle l'utilisateur s'est connecté
Que faire si vous obtenez moins zéro en Python
Comment vérifier la taille de la mémoire d'une variable en Python
Si vous donnez une liste avec l'argument par défaut de la fonction ...
Notifier le contenu de la tâche avant et après l'exécution de la tâche avec Fabric
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
[Python3] Définition d'un décorateur qui mesure le temps d'exécution d'une fonction
Comment obtenir les coordonnées de sommet d'une entité dans ArcPy
Vérifiez si vous pouvez vous connecter à un port TCP en Python
Que faire si vous ne pouvez pas utiliser la poubelle dans Lubuntu 18.04.
Créez une fonction pour obtenir le contenu de la base de données dans Go
Je veux connaître la population de chaque pays du monde.
[NNabla] Comment supprimer le niveau intermédiaire d'un réseau prédéfini
Notez que vous souhaitez décorer manuellement les paramètres passés dans le formulaire du modèle Django élément par élément
Si vous souhaitez simplement obtenir le fichier de vidage du serveur, il était pratique de créer un serveur http
[Pour les débutants chez AtCoder] Parlez de la quantité de calcul que vous voulez connaître approximativement
Si vous souhaitez inclure awsebcli dans CircleCI, spécifiez la version de python
Remarque Python: lorsque vous souhaitez connaître les attributs d'un objet
[Linux] Une commande pour obtenir une liste des commandes exécutées dans le passé
Comment comparer si le contenu des objets dans scipy.sparse.csr_matrix est le même
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
Lorsque vous souhaitez modifier l'en-tête HTTP du client de test de Flask
[NNabla] Comment ajouter une couche de quantification à la couche intermédiaire d'un modèle entraîné
Si vous souhaitez obtenir plusieurs statistiques avec groupby of pandas v1
Je veux colorer une partie de la chaîne Excel avec Python
Si vous souhaitez compter les mots en Python, il est pratique d'utiliser Counter.