系统批量运维管理器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, 函数修饰符,标识函数只会执行一次,不受多台主机影响;

posted @ 2020-08-11 14:41  星火撩原  阅读(161)  评论(0编辑  收藏  举报