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

@task @roles("webserver") def show_web_port(): run("netstate -tnulp | grep 80")

@task @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 并行装饰器