Maison > développement back-end > Tutoriel Python > notes d'utilisation du tissu python

notes d'utilisation du tissu python

高洛峰
Libérer: 2017-01-16 17:37:59
original
1113 Les gens l'ont consulté

tissu

Le titre est développement, mais en même temps, vous devez faire des travaux de développement, de tests et d'exploitation et de maintenance... Pourquoi la tâche*3 n'est-elle pas un salaire * 3 (o(╯ □╰)o)

Récemment, j'ai repris de plus en plus de choses. Les travaux de libération et d'exploitation et de maintenance sont assez mécaniques, et la fréquence est assez élevée, ce qui entraîne une perte de temps mais en a beaucoup. avantages.

Corriger les bugs, tester, soumettre le référentiel (2 minutes), ssh vers l'environnement de test pour le déploiement pull (2 minutes), rsync vers les machines en ligne A, B, C, D, E (1 minute), ssh sur les cinq machines d'ABCDE respectivement, et redémarrez une par une (8-10 minutes) = 13-15 minutes

Ce qui est frustrant, c'est que chaque opération est la même, la commande est la même et le Ce qui est terrible, c'est que sur plusieurs machines, il est difficile de le faire avec un script sur cette machine. L'essentiel du temps est perdu en ssh, en tapant des commandes et en l'écrivant sous forme de script. Il peut être exécuté en un seul clic. Passez deux minutes à regarder les résultats de l'exécution

jusqu'à ce que vous le trouviez. Fabric

Fonction

Un outil très puissant

Vous pouvez solidifier les commandes pour. déploiement automatisé ou fonctionnement multi-machines dans un script

et certains Les outils d'exploitation et de maintenance sont très similaires. Je l'utilise principalement parce que python...

est simple, facile à utiliser et facile. à utiliser

Bien sûr, vous pouvez également combiner diverses commandes de shell, y compris des artefacts anciens et des armes modernesDifférence

Configuration de l'environnement

Installez le package correspondant sur la machine locale et. la machine cible (attention, les deux sont requis)

sudo easy_install fabric
Copier après la connexion

Il s'agit actuellement de la version 1.6 (ou utilisez pip install, Idem)

Après l'installation, vous pouvez vérifier si l'installation est réussie

[ken@~$] which fab
/usr/local/bin/fab
Copier après la connexion

Après l'installation, vous pouvez parcourir la documentation officielle http://docs.fabfile.org/en/1.6/

Ensuite, vous pouvez démarrer

bonjour tout le monde

Tout d'abord, effectuez une opération simple sur la machine pour avoir une compréhension préliminaire. La source de l'exemple provient du site officiel

Créez un nouveau script py : fabfile.py

def hello():
    print("Hello world!")
Copier après la connexion

Exécution de la ligne de commande :

[ken@~/tmp/fab$] fab hello
Hello world!
Done.
Copier après la connexion

Notez que fabfile n'a pas besoin d'être utilisé comme nom de fichier ici, mais le fichier

[ken@~/tmp/fab$] mv fabfile.py test.py
fabfile.py -> test.py
[ken@~/tmp/fab$] fab hello
Fatal error: Couldn't find any fabfiles!
Remember that -f can be used to specify fabfile path, and use -h for help.
Aborting.
[ken@~/tmp/fab$] fab -f test.py hello
Hello world!
Done.
Copier après la connexion
doit être spécifié lors de l'exécution <. 🎜>Avec paramètres :

Modifier le script fabfile.py :

def hello(name, value):
    print("%s = %s!" % (name, value))
Copier après la connexion
Exécuter

[ken@~/tmp/fab$] fab hello:name=age,value=20
age = 20!
Done.
[ken@~/tmp/fab$] fab hello:age,20
age = 20!
Done.
Copier après la connexion
Exécuter l'opération native

Opération locale simple :

from fabric.api import local
def lsfab():
    local(&#39;cd ~/tmp/fab&#39;)
    local(&#39;ls&#39;)
Copier après la connexion
Résultat :

[ken@~/tmp/fab$] pwd;ls
/Users/ken/tmp/fab
fabfile.py   fabfile.pyc  test.py      test.pyc
[ken@~/tmp/fab$] fab -f test.py lsfab
[localhost] local: cd ~/tmp/fab
[localhost] local: ls
fabfile.py  fabfile.pyc test.py     test.pyc
Done.
Copier après la connexion
Le combat réel commence :


Supposons que vous deviez soumettre chaque jour un fichier de configuration des paramètres .py au référentiel (les conflits ne sont pas pris en compte ici)

S'il s'agit d'une opération manuelle :

cd /home/project/test/conf/
git add settings.py
git commit -m &#39;daily update settings.py&#39;
git pull origin
git push origin
Copier après la connexion
En d'autres termes, vous devez taper ces commandes manuellement une fois par jour. le soi-disant travail quotidien est un travail mécanisé qui doit être répété chaque jour. Voyons comment utiliser Fabric pour réaliser une réalisation en un clic : (en fait, cela peut être fait directement avec un script shell, mais l'avantage de fab est que pas ici. C'est principalement éloigné de la zone locale. Préparez-vous aux opérations de bout en bout, après tout, écrivez un script pour les opérations à deux endroits pour faciliter la maintenance)

from fabric.api import local
def setting_ci():
    local("cd /home/project/test/conf/")
    local("git add settings.py")
    #后面你懂的,懒得敲了…..
Copier après la connexion
Mélanger et assortir pour intégrer les opérations à distance.

A ce moment, supposons que vous souhaitiez vous rendre dans le / de la machine A Mettez à jour le fichier de configuration dans le répertoire de projet correspondant de home/ken/project

#!/usr/bin/env python
# encoding: utf-8
from fabric.api import local,cd,run
env.hosts=[&#39;user@ip:port&#39;,] #ssh要用到的参数
env.password = &#39;pwd&#39;

def setting_ci():
    local(&#39;echo "add and commit settings in local"&#39;)
    #刚才的操作换到这里,你懂的
def update_setting_remote():
    print "remote update"
    with cd(&#39;~/temp&#39;):   #cd用于进入某个目录
        run(&#39;ls -l | wc -l&#39;)  #远程操作用run
def update():
    setting_ci()
    update_setting_remote()
Copier après la connexion
Ensuite, exécutez :

[ken@~/tmp/fab$] fab -f deploy.py update
[user@ip:port] Executing task &#39;update&#39;
[localhost] local: echo "add and commit settings in local"
add and commit settings in local
remote update
[user@ip:port] run: ls -l | wc -l
[user@ip:port] out: 12
[user@ip:port] out:
Done.
Copier après la connexion
Notez que si env.password n'est pas déclaré, il sera exécuté sur la machine correspondante. Une interaction demandant un mot de passe apparaîtra


<🎜. >Mashup multi-serveur

Pour faire fonctionner plusieurs serveurs, plusieurs hôtes doivent être configurés

Résultat :
#!/usr/bin/env python
# encoding: utf-8
from fabric.api import *
#操作一致的服务器可以放在一组,同一组的执行同一套操作
env.roledefs = {
            &#39;testserver&#39;: [&#39;user1@host1:port1&#39;,],  
            &#39;realserver&#39;: [&#39;user2@host2:port2&#39;, ]
            }
#env.password = &#39;这里不要用这种配置了,不可能要求密码都一致的,明文编写也不合适。打通所有ssh就行了&#39;
@roles(&#39;testserver&#39;)
def task1():
    run(&#39;ls -l | wc -l&#39;)
@roles(&#39;realserver&#39;)
def task2():
    run(&#39;ls ~/temp/ | wc -l&#39;)
def dotask():
    execute(task1)
    execute(task2)
Copier après la connexion

Extension Couleur
[ken@~/tmp/fab$] fab -f mult.py dotask
[user1@host1:port1] Executing task &#39;task1&#39;
[user1@host1:port1] run: ls -l | wc -l
[user1@host1:port1] out: 9
[user1@host1:port1] out:
[user2@host2:port2] Executing task &#39;task2&#39;
[user2@host2:port2] run: ls ~/temp/ | wc -l
[user2@host2:port2] out: 11
[user2@host2:port2] out:

Done.
Copier après la connexion
1. 🎜>

peut imprimer des couleurs, ce qui est plus accrocheur et pratique lors de la visualisation des informations sur le résultat de l'opération

from fabric.colors import *

def show():

print vert('succès')

imprimer rouge('échec')

jaune imprimer('jaune')
#fab -f color.py show

1.hôte, utilisateur, port , liste de configuration des mots de passe, le tout écrit dans un fichier

ou directement dans le script, bien sûr c'est plus... ...

ou

env.hosts = [
&#39;host1&#39;,
&#39;host2&#39;

]
env.passwords = { 
&#39;host1&#39;: "pwdofhost1",
&#39;host2&#39;: "pwdofhost2",
}
Copier après la connexion

2. Analysez-le dans l'imbrication de cartes en fonction de la clé et mettez-le en déploiement

env.roledefs = {
&#39;testserver&#39;: [&#39;host1&#39;, &#39;host2&#39;],
&#39;realserver&#39;: [&#39;host3&#39;, ]
}
env.passwords = {
&#39;host1&#39;: "pwdofhost1",
&#39;host2&#39;: "pwdofhost2",
&#39;host3&#39;: "pwdofhost3", 
}
Copier après la connexion
De plus, la commande peut également être solidifiée dans une seule liste de cmds...

Pour plus d'articles connexes Pour les notes d'utilisation de Python Fabric, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal