Python的自动化部署模块Fabric的安装及使用指南
fabric是python2.5或者更高的库,可以通过ssh在多个host上批量执行任务.完成系统管理任务.它提供一套基本操作在本地和远程执行shell命令,或者上传下载文件,辅助提供用户输入或终止执行.
下面安装fabric模块有2种方法:
1.使用easy_install(下面是debain5环境)
root@10.1.6.200:pshell# apt-get install python-dev (安装Python头文件) root@10.1.6.200:pshell# apt-get install python-setuptools (安装easy_install) root@10.1.6.200:pshell# wget http://peak.telecommunity.com/dist/ez_setup.py root@10.1.6.200:pshell# python ez_setup.py root@10.1.6.200:pshell# easy_install fabric
Searching for fabric Reading http://pypi.python.org/simple/fabric/ Best match: Fabric 1.6.1 Downloading http://pypi.python.org/packages/source/F/Fabric/Fabric-1.6.1.tar.gz#md5=c318ac3f7011ede0be1ca9a20f435735 Processing Fabric-1.6.1.tar.gz Running Fabric-1.6.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-CVuLrs/Fabric-1.6.1/egg-dist-tmp-ZFNoWY warning: no previously-included files matching '*' found under directory 'docs/_build' warning: no previously-included files matching '*.pyc' found under directory 'tests' warning: no previously-included files matching '*.pyo' found under directory 'tests' zip_safe flag not set; analyzing archive contents... fabric.version: module references __file__ Adding Fabric 1.6.1 to easy-install.pth file Installing fab script to /usr/bin .... Installed /usr/lib/python2.5/site-packages/pycrypto-2.6-py2.5-linux-x86_64.egg Finished processing dependencies for fabric
2.使用pip(下面使用的是debian7环境)
apt-get install python-pip pip install fabric apt-get install python-paramiko
导入模块未报错说明安装成功.
实例:
1.在调用fabric的时候使用命令行参数,-H 指定哪台主机
root@10.1.6.201:python# cat fabfile4.py
#!/usr/bin/env python #coding=utf-8 from fabric.api import * def printMem(): cmd_output = run('free -m') print cmd_output
root@10.1.6.201:python# fab -H root@10.1.1.45 printMem -f fabfile4.py [root@10.1.1.45] Executing task 'printMem' [root@10.1.1.45] run: free -m [root@10.1.1.45] Login password for 'root': #提示输入密码 [root@10.1.1.45] out: total used free shared buffers cached [root@10.1.1.45] out: Mem: 1005 968 37 0 36 831 [root@10.1.1.45] out: -/+ buffers/cache: 100 904 [root@10.1.1.45] out: Swap: 1913 0 1913 [root@10.1.1.45] out:
total used free shared buffers cached Mem: 1005 968 37 0 36 831 -/+ buffers/cache: 100 904 Swap: 1913 0 1913 Done. Disconnecting from 10.1.1.45:22000... done.
2.以上我们需要输入密码才能完成操作,怎样自动执行呢?可以在fabfile4文件中配置HOST.也就是环境变量.
root@10.1.6.201:python# vim fabfile.py
#!/usr/bin/env python #coding=utf-8 from fabric.api import * from fabric.context_managers import * env.host_string = '10.1.1.45' env.port = '22000' #默认端口22,默认登录用户root env.password='passwd' def test1(): with cd('/home'): run('ls -l') test1()
root@10.1.6.201:python# python fabfile.py #脚本执行
[10.1.1.45] run: ls -l [10.1.1.45] out: total 8 [10.1.1.45] out: drwxr-xr-x 2 debian debian 4096 2012-08-27 11:54 debian [10.1.1.45] out: drwxr-xr-x 2 root nogroup 4096 2013-05-22 18:07 ftp [10.1.1.45] out:
root@10.1.6.201:python# vim fabfile1.py
#!/usr/bin/env python #coding=utf-8 from fabric.api import * from fabric.context_managers import * env.hosts = ['10.1.6.200','10.1.1.45'] env.port = '22000' env.password='passwd' def test1(): with cd('/home'): #更改目录 run('ls -l')
root@10.1.6.201:python# fab test1 -f fabfile.py #使用fab指定任务执行,注意文件后默认跟fabfile.py
[10.1.6.200] Executing task 'test1' [10.1.6.200] run: ls -l [10.1.6.200] out: total 24 [10.1.6.200] out: drwxr-xr-x 2 davehe davehe 4096 2013-02-27 10:00 davehe [10.1.6.200] out: -rw-r--r-- 1 root root 1990 2013-02-27 09:55 davehe.tar.gz [10.1.6.200] out: -rw-r--r-- 1 root root 396 2013-05-17 18:27 rsync_log_130517 [10.1.6.200] out: -rw-r--r-- 1 root root 7916 2013-05-20 21:04 rsync_log_130520 [10.1.6.200] out: drwxr-xr-x 2 taomee taomee 4096 2013-01-29 04:27 taomee [10.1.6.200] out: [10.1.1.45] Executing task 'test1' [10.1.1.45] run: ls -l [10.1.1.45] out: total 8 [10.1.1.45] out: drwxr-xr-x 2 debian debian 4096 2012-08-27 11:54 debian [10.1.1.45] out: drwxr-xr-x 2 root nogroup 4096 2013-05-22 18:07 ftp [10.1.1.45] out: Done. Disconnecting from 10.1.1.45:22000... done. Disconnecting from 10.1.6.200:22000... done.
3.使用get/put.利用sftp协议上传下载文件
root@10.1.6.201:python# cat fabfile1.py
#!/usr/bin/env python #coding=utf-8 from fabric.api import * from fabric.colors import * from fabric.context_managers import * env.hosts = ['10.1.1.45'] env.port = '22000' env.password='passwd' def test1(): print(red("i'm 201")) local('ls -l /tmp') def test2(): print (green("i'm get file 45 to 186")) get('/home/ftp/a.txt','/tmp/') #下载 # put('/tmp/','/home/ftp/') #上传 local('ls -l /tmp') #local运行本地命令 def final(): execute(test1) execute(test2)
root@10.1.6.201:python# fab final -f fabfile1.py
[10.1.1.45] Executing task 'final' [10.1.1.45] Executing task 'test1' i'm 201 [localhost] local: ls -l /tmp total 31684 drwxr-xr-x 2 root root 4096 May 13 22:08 bin drwxr-xr-x 3 root root 4096 May 13 22:08 conf drwxr-xr-x 6 root root 4096 May 13 22:08 etc -rwxr-xr-x 1 root root 6797 May 13 22:08 init -rw-r--r-- 1 root root 32400896 May 13 22:07 initrd.img-3.2.0-4-amd64 drwxr-xr-x 6 root root 4096 May 13 22:08 lib drwxr-xr-x 2 root root 4096 May 13 22:08 lib64 drwxr-xr-x 2 root root 4096 May 13 22:08 run drwxr-xr-x 2 root root 4096 May 13 22:08 sbin drwxr-xr-x 6 root root 4096 May 13 22:08 scripts [10.1.1.45] Executing task 'test2' i'm get file 45 to 186 [10.1.1.45] download: /tmp/a.txt <- /home/ftp/a.txt [localhost] local: ls -l /tmp total 31688 -rw-r--r-- 1 root root 6 May 29 22:29 a.txt drwxr-xr-x 2 root root 4096 May 13 22:08 bin drwxr-xr-x 3 root root 4096 May 13 22:08 conf drwxr-xr-x 6 root root 4096 May 13 22:08 etc -rwxr-xr-x 1 root root 6797 May 13 22:08 init -rw-r--r-- 1 root root 32400896 May 13 22:07 initrd.img-3.2.0-4-amd64 drwxr-xr-x 6 root root 4096 May 13 22:08 lib drwxr-xr-x 2 root root 4096 May 13 22:08 lib64 drwxr-xr-x 2 root root 4096 May 13 22:08 run drwxr-xr-x 2 root root 4096 May 13 22:08 sbin drwxr-xr-x 6 root root 4096 May 13 22:08 scripts Done. Disconnecting from 10.1.1.45:22000... done.
上面实例中只列举了几个常用的farbic环境变量.如env.hosts,env.password等,可以不需要交互输入密码.
以下还有常用环境变量以供参考:
- exclude_hosts:指定一个主机列表,在fab执行时,忽略列表中的机器
- user:ssh使用哪个用户登录远程主机
- hosts :全局的host列表
- host_string :当fabric连接远程机器执行run、put时,设置的user/host/port等
- password:默认ssh连接远程主机密码,也可以是sudo提示输入密码
- password:一个字典供内部使用,为每台主机host设置密码,key是主机,value值存放密码
- port:设置默认端口
- roledefs:使用字典定义角色名字对应的主机ip
- roles:一个全局的role列表
from fabric.api import run, roles env.roledefs = { 'db': ['db1', 'db2'], 'web': ['web1', 'web2', 'web3'], } @roles('db') def migrate(): # Database stuff here. pass @roles('web') def update(): # Code updates here. pass
fab也可以使用命令设置环境变量,常用命令
- -f FABFILE, --fabfile=FABFILE 默认fabfile.py
- -H HOSTS, --hosts=HOSTS env.hosts=hosts
- -p PASSWORD, --password=PASSWORD env.password
- -R ROLES, --roles=ROLES env.roles

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

De nombreux développeurs de sites Web sont confrontés au problème de l'intégration de Node.js ou des services Python sous l'architecture de lampe: la lampe existante (Linux Apache MySQL PHP) a besoin d'un site Web ...

Lorsque vous utilisez Scapy Crawler, la raison pour laquelle les fichiers de stockage persistants ne peuvent pas être écrits? Discussion Lorsque vous apprenez à utiliser Scapy Crawler pour les robots de données, vous rencontrez souvent un ...

Choix de la bibliothèque de développement d'applications de bureau multiplateforme Python De nombreux développeurs Python souhaitent développer des applications de bureau pouvant s'exécuter sur Windows et Linux Systems ...

Python Process Pool gère les demandes TCP simultanées qui font coincé le client. Lorsque vous utilisez Python pour la programmation réseau, il est crucial de gérer efficacement les demandes TCP simultanées. ...

Explorez profondément la méthode de visualisation de Python Functools.Partial Objet dans Functools.Partial en utilisant Python ...

Précision avec Python: Source de sablier Dessin graphique et vérification d'entrée Cet article résoudra le problème de définition variable rencontré par un novice Python dans le programme de dessin graphique de sablier. Code...

Comment gérer les images haute résolution à Python pour trouver des zones blanches? Traitement d'une image haute résolution de 9000x7000 pixels, comment trouver avec précision deux de l'image ...

Conversion et statistiques de données: traitement efficace des grands ensembles de données Cet article introduira en détail comment convertir une liste de données contenant des informations sur le produit en une autre contenant ...
