设为首页 加入收藏

TOP

Fabric:Python远程部署工具
2014-11-23 23:22:49 来源: 作者: 【 】 浏览:9
Tags:Fabric:Python 远程 部署 工具

关于Fabric


Fabric是一个Python库和命令行工具,旨在为应用部署和系统管理任务的SSH的流水线式操作,使之更加高效和方便。Fabric提供了一套基本的执行本地和远程shell命令、上传和下载文件的操作,包括一些辅助函数,例如驱动正在运行的用户输入或者放弃执行。


Fabric通过把大量频繁使用的SSH操作写入到一个脚本中(fabric.py),来远程执行一些应用部署或者系统维护的任务。Fabric是类似paramiko的一个库,是对paramiko的再次封装,所以比使用paramiko更简单。


Fabric的优点


1. 角色定义


2. 代码易读


3. 封装了本地、远程操作


4. 参数灵活,能偶动态指定host/role等,还有并发执行(基于multiprocessing)


5. 完整的日志输出


安装Fabric


Fabric的安装很简单,可以直接使用pip或者easy_install安装到当前Python环境中,或者下载最新的源码使用"python setup.py xxx"的方式来安装:


#pip install fabric


使用Fabric


--------------------------------------------------------------------------------


1 Fabric通过命令行工具fab来执行定义在fabfile.py中的任务,常用的配置和函数如下


--------------------------------------------------------------------------------


1. 常用的fab命令选项和参数:


-l 显示可用的task


-H 指定host,多个host用逗号分开


-R 指定role,多个role用逗号分开


-P 并分数,默认是串行


-w warn_only,默认为遇到异常直接放弃执行并退出


-f 指定入口文件,fab默认入口文件是:fabfile/fabfile.py




2. fabfile.py文件中常用配置和函数:


env.host 主机ip,也可以使用fab选项-H参数来指定


env.password SSH密码,若已经设置好无密码登录,则可以忽略


env.roledefs 角色分组,如:{'web': ['x', 'y'], 'db': ['z']}


local('pwd') 执行本地命令


lcd('/tmp') 切换本地目录


cd('/tmp') 切换远程目录


run('uname -s') 执行远程命令


sudo('service httpd restart') 执行远程sudo,注意pty选项




2 任务函数


--------------------------------------------------------------------------------


Fabric中的任务就是一个个Python函数,通过将上述的函数封装到某一个函数中来执行相应的任务


示例:


#cat fabfile.py


from fabric.api import run


def host_type():


run('uname -s')




def hello(name="jayzhou"):


print("Hello %s!" % name)




def combine(name="jayzhou"):


hello(name)


host_type()


在执行任务的时候,可以通过fab的命令行参数为任务函数传递参数:


#fab hello:name=Rango




3. 管理远程服务


--------------------------------------------------------------------------------


1. 获取远程服务器版本信息


#cat fabfile.py


from fabric.api import env


from fabric.api import cd



from fabric.api import run



from fabric.api import local



from fabric.api import get



from fabric.api import put




env.hosts = ['192.168.56.101', '192.168.56.102']


env.user = 'root'


env.password = "password"




def get_version():


local('cat /etc/issue')


run('cat /etc/issue')


with cd('/root/'):


put('/home/rango/test.txt', 'test.txt', mode=0755)


get('hello_world.txt')


run('ls')




def get_host_name():


run('hostname')


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇修复升级Python版本之后ibus输入.. 下一篇使用Buildout进行开发

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: