系统批量运维管理器Fabric之基本语法篇
一、fab的常用参数
fab 作为Fabric程序的命令行入口,提供丰富的参数调用,命令格式如下:
fab [options] <command>[:arg1,arg2=var1,host=foo,host2=’h1;h2’…] … |
下面列举了常用的几个参数,更多参数可使用fab -help查看。
-l, 显示定义好的任务函数名 -f, 指定fab入口文件,默认入口文件名为fabfile.py
-g, 指定网关(中转)设备,比如堡垒机环境,指定填写IP地址即可 -H, 指定目标主机,多台主机使用”,”号分割 -P, 以异步并行的方式运行多台主机任务,默认为串行运行 -R, 指定role(角色),以角色名区分不同业务组设备 -t, 设置设置连接超时时间(秒) -T, 设置远程主机命令执行超时时间(秒) -w, 当命令执行失败,发出警告,而非默认终止任务 |
接上篇文章的”四、一个小例子”,有时候我们甚至不需要写一行Python代码也可以完成这种远程操作,直接使用命令行的形式,例如:
fab -p 123456 -H 192.168.80.250,192.168.80.240 — ‘uname -s’ |
二、fabfile的编写
fab命令结合我们编写的fabfile.py(其它文件名必须添加 -f filename 引用)来搭配使用的,部分命令行参数可以通过相应的方法来代替,使之更加灵活,例如”-H 192.168.80.250,192.168.80.240″,我们可以通过env.host来实现,如”env.host=[‘192.168.80.250′,’192.168.80.240’]”。fabfile的主体由多个自定义的任务函数组成,不同任务实现不同的操作逻辑,下面详细介绍。
1、全局属性设定
env对象的作用是定义fabfile的全局设定,支持多个属性,包括目标主机、用户、密码、角色等,各属性说明如下:
env.host, 定义目标主机,可以用IP或主机名表示,以python列表形式定义,例:env.hosts = [“192.168.80.250″,”192.168.80.240”] env.exclude_hosts, 排除指定主机,示例:env.exclude_hosts=[“192.168.80.250”]
env.user, 定义主机名,如:env.user=”root” env.port, 定义目标主机端口,默认为22,如:env.port=”22″ env.password, 定义密码,如:env.password=’123456′ env.passwords, 与password功能一样,区别在于不同主机不同密码的应用场景,示例: env.passwords = { ‘root@192.168.1.1:22’: ‘123456’, ‘root@192.168.1.2:22’: ‘1234567’, ‘root@192.168.1.2:22’: ‘12345678’ } env.gateway, 定义网关(中转、堡垒机)IP,如:env.gateway=”192.168.80.2″ env.deploy_release_dir, 自定义全局变量,格式:env.+”变量名”,如:env.age,env.name env.roledefs, 定义角色分组,示例:将web和db主机组区分,定义如下: env.roledefs = { “webservers”:[“192.168.80.250″,”192.168.80.240”] “dbservers”:[“192.168.80.230”] } |
三、常用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/abc.txt’,’/tmp/abc1.txt’); get, 从远程主机下载文件到本地,如:get(‘/tmp/abc1.txt’,’/home/abc.txt’); prompt, 获得用户输入信息,如:prompt(‘input password:’); confirm, 获得提示信息确认,如:confirm(“Tests failed. Continue[Y/N]?”); reboot, 重启远程主机,如:reboot(); @task, 函数修饰符,标识函数为fab调用,非标识fab不可见,纯业务逻辑; @runs_once, 函数修饰符,标识函数只会执行一次,不受多台主机影响; |