Python3中详解fabfile的编写


Posted in Python onJune 24, 2018

fab命令好似结合我们编写的fabfile.py(其它文件名必须添加-f filename应用)来搭配使用的,部分命令行参数可以通过相应的方法来替代,使之更加灵活,例如"-H 192.168.56.133,192.168.56.134",我们可以通过定义env.hosts来实现,如"env.hosts=['192.168.56.133,192.168.56.134']"。fabfile的主体由多个自定义的任务函数组成,不同任务实现不同的操作逻辑。

全局属性设定

env对象的作用是定义fabfile的全局设定,支持多个属性,包含目标主机、用户名、密码、等角色,各属性说明如下:

  • evn.host:定义目标主机,可以用IP或主机名表示,以Python的列表形式定义,如evn.hosts['192.168.56.133','192.168.56.134']。
  • env.exclude_hosts:排除指定主机,如env.exclude_hosts=['192.168.56.133']。
  • env.user:定义用户名,如env.user="root"。
  • env.port:定义目标主机端口,默认为22,如env.port="22"。
  • env.password:定义密码,如env.password='1234567'。
  • env.passwords:与password功能一样,区别在于不同主机不同密码的应用场景,需要注意的是,配置passwords是需配置用户、主机、端口等信息,如:
env.passwords = {
  'root@192.168.56.131:22':'1234567',
  'root@192.168.56.132:22':'1234567',
  'root@192.168.56.133:22':'1234567',
  'root@192.168.56.134:22':'1234567'
}
  • env.gateway:定义网关(中转、堡垒机)IP,如env.gateway = '192.168.56.1'。
  • env.deploy_release_dir:自定义全局变量,格式:env.+"变量名称",如env.deploy_release_dir、env.age、env.sex等。
  • env.roledefs:定义角色分组,比如web组与db组主机区分开来,定义如下:
env.roledefs = {
  'webservers':['192.168.56.131','192.168.56.132','192.168.56.133'],
  'dbserver':['192.168.56.134','192.168.56.135']
}

引用时使用Python修饰符的形式进行,角色修饰符下面的任务函数为其作用域,下面来看一个示例:

@roles('webservers')
def webtask():
  run('/etc/init.d/nginx start')


@roles('dbservers')
def dbtask():
  run('/etc/init.d/mysql start')


@roles('webservers','dbservers')
def pubclitasj():
  run('uptime')

def deploy():
  execute(webtask)
  execute(dbtask)
  execute(pubclitask)

在命令执行fab deploy就可以实现不同角色执行不同的任务函数了。

常用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/user.info','/data/user.info');
  • prompt:获得用户输入信息,如:prompt('please input user password:');
  • confirm:获得提示信息确认,如:confirm("Tests failed. Continue[Y/N]?");
  • reboot:重启远程主机,如:reboot();
  • @task:函数修饰符,标识的函数为fab可调用的,非标记对fab不可见,纯业务逻辑;
  • runs_once:函数修复符,标识的函数只会执行一次,不受多台主机影响。
Python 相关文章推荐
python操作gmail实例
Jan 14 Python
python虚拟环境的安装配置图文教程
Oct 20 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
python如何定义带参数的装饰器
Mar 20 Python
Php多进程实现代码
May 07 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
Jul 26 Python
python感知机实现代码
Jan 18 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
Jan 24 Python
Pycharm操作Git及GitHub的步骤详解
Oct 27 Python
python游戏开发之pygame实现接球小游戏
Apr 22 Python
关于python写入文件自动换行的问题
Jun 23 #Python
利用Python读取txt文档的方法讲解
Jun 23 #Python
python读取一个目录下所有txt里面的内容方法
Jun 23 #Python
Python 读取某个目录下所有的文件实例
Jun 23 #Python
python保存数据到本地文件的方法
Jun 23 #Python
基于Python List的赋值方法
Jun 23 #Python
python统计多维数组的行数和列数实例
Jun 23 #Python
You might like
Adodb的十个实例(清晰版)
2006/12/31 PHP
php.ini 配置文件的深入解析
2013/06/17 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
Javascript - HTML的request类
2006/07/15 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
jQuery+ajax实现实用的点赞插件代码
2016/07/06 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
ES6基础之默认参数值
2019/02/21 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
详解python 中in 的 用法
2019/12/12 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
在家更换处方镜片:Lensabl
2019/05/01 全球购物
什么是会话Bean
2015/05/14 面试题
《放小鸟》教学反思
2014/04/20 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python