#################################### Fabric3 ##############################################
1.安装
# pip install fabric3 #fabric3是支持python3的fabric
# python3
# import fabric #如果无报错则证明安装成功
2.常用参数
-l #显示定义好的任务函数名
-f #指定fab入口文件,默认为fabfile.py
-g #指定网关
-H #指定目标主机,多台主机用逗号分隔
-P #以异步并行方式运行多主机任务,默认为串行
-R #指定role(角色),以角色名区分不同业务组设备
-t #设置超时时间(秒)
-T #设置远程主机命令执行超时时间(秒)
-w #当命令执行失败,发出警告,而非默认的中止任务
3.编写fabfile.py
fab默认使用当前目录下的fabfile.py作为默认文件
###文件第一行为 from fabric.api import *
示例:
# vim fabfile.py
from fabric.api import *
host1 = '196.168.1.1'
env.hosts=[host1] #可用列表形式
env.passwords = 'password' #可用字典形式{'[email protected]:22':'password','[email protected]:22':'password'}
def hello():
print("hello world!")
def ping():
run('ping www.baidu.com')
def chdir():
cd('/usr')
run('ls')
def istrue():
with cd('/'):
run('ls')
4.全局属性设定
env.host,定义目标主机,单目标主机
env.hosts,定义目标主机,列表类型。['192.168.1.1', '192.18.1.2',]。
env.exclude_hosts,排除指定主机。
env.user,定义用户名。
env.port,定义目标主机端口。
env.password,定义密码
env.passwords,字典类型,配置是需要用户名@目标主机ip:端口:密码,{'[email protected]:22':'password','[email protected]:22':'password'}
env.gateway,定义网关IP
env.deploy_release_dir,自定义全局变量
env.roledefs,定义角色分组,
env.roledefs = {'webserver':['host1','host2','host3']
'dbserver':['host4','host5']
}
使用角色修饰符,角色修饰符下面的任务函数为其作用于,实例:
@roles('webserver')
def webtask():
run('uname')
@roles('dbserver')
def dbtask():
run('uname')
@roles('webserver', 'dbserver')
def publictask():
run('uname')
def deploy():
execute(webtask)
execute(dbtask)
execute(publictask)
5.常用API
local(),执行本地命令
lcd(),切换本地目录
cd(),切换远程目录
run(),执行远程命令
sudo(),sudo方式执行远程命令
put(),上传本地文件到远程主机
get(),从远程主机下载文件
prompt(),获得用户输入信息
confirm(),获得提示信息确认
reboot(),重启远程主机
@task,函数修饰符,表示的函数为fab可调用,非标记对fab不可见,纯业务逻辑
@runs_once,函数修饰符,表示的函数只会执行一次,不受多台主机影响
@roles,