Fabric 是一个 Python (2.5-2.7) 库和命令行工具,用来流水线化执行 SSH 以部署应用或系统管理任务。
安装:
pip install fabric
首先来一个入门通用demo,hello world。
文件:hello_world.py
# coding: utf-8 def hello(): print ‘Hello world!‘
运行结果:
默认查找当前目录下fabfile.py文件,若文件名非fabfile.py,则需要使用-f指定文件。
$ fab -f hello_world.py hello Hello world! Done.
env(环境变量)对象说明:
env.hosts #定义目标主机,可以用IP或主机名表示,以python的列表形式定义。如env.hosts=[‘192.168.1.21‘,‘192.168.1.22‘] env.exclude_hosts #排除指定主机,如env.exclude_hosts=[‘192.168.1.21‘] env.user #定义用户名,如env.user=‘root‘ env.port #定义端口,默认为22,如env.port=‘22‘ env.password #定义密码,如env.password=‘123456‘ env.passwords #定义多个密码,不同主机对应不同密码,如:env.passwords = {‘[email protected]:22‘:‘123456‘,‘[email protected]:22‘:‘654321‘} env.gateway #定义网关(中转、堡垒机)IP,如env.gateway=‘192.168.1.23 env.roledefs #定义角色分组,比如web组合db组主机区分开来:env.roledefs = {‘webserver‘:[‘192.168.1.21‘,‘192.168.1.22‘],‘dbserver‘:[‘192.168.1.25‘,‘192.168.1.26‘]} env.deploy_release_dir #自定义全局变量,格式:env. + ‘变量名称‘,如env.age,env.sex等
其中roledefs使用demo如下:
env.roledefs = {‘front‘:[‘192.168.1.111‘],‘api‘:[‘192.168.1.112‘]} @roles(‘front‘) def nginx_restart(): run(‘service nginx restart‘) @roles(‘front‘, ‘api‘) def uptime(): run(‘uptime‘)
常用API:
local #执行本地命令,如local(‘uname -s‘) lcd #切换本地目录,如lcd(‘/home‘) cd #切换远程目录 run #执行远程命令 sudo #sudo方式执行远程命令,如sudo(‘/etc/init.d/httpd start‘) put #上次本地文件导远程主机,如put(‘/home/user.info‘,‘/data/user.info‘) get #从远程主机下载文件到本地,如:get(‘/data/user.info‘,‘/home/user.info‘) prompt #获得用户输入信息,如:prompt(‘please input user password:‘) confirm #获得提示信息确认,如:confirm(‘Test failed,Continue[Y/N]?‘) reboot #重启远程主机,如:reboot() @task #函数修饰符,标识的函数为fab可调用的,非标记对fab不可见,纯业务逻辑 @runs_once #函数修饰符,标识的函数只会执行一次,不受多台主机影响
Demo(demo.py):
运行命令:fab -f demo.py list
# coding: utf-8 from fabric.api import * env.user = ‘root‘ env.roledefs = { ‘api‘: [‘10.211.55.5:22‘], } env.passwords = { ‘[email protected]:22‘: ‘linjianfeng‘, } def list_files(): run(‘ls -l‘) @task # 使用@task对fab命令可见,其他没有使用@task标记的函数对fab命令不可用,fab -f demo.py -l可查看开放函数 @roles(‘api‘) def list(): list_files()