fabric
Fabric是一个基于Python(2.5-2.7)的库和命令行工具,用来提高基于SSH的应用部署和系统管理效率。稍微了解Python的人都知道,实际上它只节省了数行 if name == “main” 这样的惯例代码而已。Fabric 的设计目的更是为了使用它自己的 API,包括执行 Shell 命令、传送文件等函数(或操作)接口。
命令使用 
fab [options] [:arg1,arg2=val2,host=foo,hosts=’h1;h2’,…],常用的参数有: 
-l,显示定义好的任务函数名; 
-f,指定fab入口文件,默认入口文件名为fabfile.py; 
-g,指定网关设备,比如堡垒机环境,填写堡垒机IP即可; 
-H,指定目标主机,多台主机用’,’号分隔; 
-P,以异步并行方式运行多个主机任务,默认为串行运行; 
-R,指定role(角色),以角色名区分不同业务组设备; 
-t,设置设备连接超时时间; 
-T,设置远程主机命令执行超时时间; 
-w,当命令执行失败,发出警告,而非默认终止任务全局属性的设定 
env.hosts:定义多个目标主机,用IP或者主机名的列表,env.hosts=[“192.168.0.1”,”192.168.0.2”] 
env.user:定义用户名,env.user = “root” 
env.port:定义端口,env.port=22 
env.password:定义密码,env.password = ‘1111’ 
env.passwords:定义多台主机的用户名、IP地址、端口、密码。 
env.passwords={ 
“root@192.168.0.1:22” : “1111”, 
“root@192.168.0.2:22” : “1111”, 
} 
env.gateway:定义网关,env.gateway=”192.168.0.1” 
env.roledefs:定义角色分组 
env.roledefs={ 
“webserver”:[“192.168.0.1”], 
“dbserver”:[“192.168.0.2”] 
}fabfile编写 
from fabric.api import *
env.user = "root"
env.hosts=["192.168.0.1","192.168.0.2"]
env.passwords={
"root@192.168.0.1:22" : "1111",
"root@192.168.0.2:22" : "1111",
}
nv.roledefs={
"webserver":["192.168.0.1"],
"dbserver":["192.168.0.2"]
}@task
def show():
run("hostname")@taskbr/>@roles("webserver")
def show_web_port():
run("netstate -tnulp | grep 80")@taskbr/>@roles("wdbserver")
def show_db_port():
run("netstate -tnulp | grep 3306")
fab -f fabfile.py -l //查看有多少个任务 
fab -f fabfiel.py show // 运行show这个任务(所有主机) 
fab -f fabfiel.py show_web_port // 运行show_web_port这个任务(按角色分配的主机运行) 
fab -f fabfiel.py show_db_port // 运行show_db_port这个任务(按角色分配的主机运行)常用API 
Fabric提供了一组简单但功能强大的fabric.api命令集,简单地调用这样API就能完成大部分应用场景需求,Fabric支持常用的方法及说明如下: 
local,执行本地命令,如local:(‘uname -s’); 
lcd,切换本地目录,如lcd:(‘/home’); 
cd,切换远程目录,如cd:(‘/data/logs/’); 
run,执行远程命令,如:run(‘free -m’) 
sudo,sudo方式执行远程命令,如:sudo(‘/etc/init.d/httpd start’); 
put,上传本地文件到远程主机,如:put(‘/home/user.info’,’/data/user.info’); 
get,从远程主机下载文件到本地,如:get(‘/home/user.info’,’/data/user.info’); 
prompt,获得用户输入信息,如:prompt(‘please input user password:’); 
confirm,获得提示信息确认,如:confirm(‘Test failed,Continue[Y/N]’); 
reboot,重启远程主机,如reboot(); 
@task,函数修饰符,标识符的函数为fab可调用,非标记对fab不可见,纯业务逻辑; 
@runs_once,函数修饰符,标识符的函数只会执行一次,不受多台主机影响; 
@roles(角色) 
@hosts(主机1,主机2) 
@paralles 并行装饰器


转载于:https://blog.51cto.com/lookingdream/2043458