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中操作字符串之startswith()方法的使用
May 20 Python
python开发中range()函数用法实例分析
Nov 12 Python
Python备份目录及目录下的全部内容的实现方法
Jun 12 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
Apr 15 Python
详谈python read readline readlines的区别
Sep 22 Python
django中静态文件配置static的方法
May 20 Python
python对视频画框标记后保存的方法
Dec 07 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
Jan 08 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
Apr 27 Python
Python必备技巧之字符数据操作详解
Mar 23 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
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
php上传文件问题汇总
2015/01/30 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
php7下的filesize函数
2019/09/30 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
javascript delete 使用示例代码
2010/03/29 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
微信小程序入门教程
2016/11/18 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
JointJS JavaScript流程图绘制框架解析
2019/08/15 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
基于python socketserver框架全面解析
2017/09/21 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
python 重定向获取真实url的方法
2018/05/11 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
Python使用sax模块解析XML文件示例
2019/04/04 Python
基于python判断目录或者文件代码实例
2019/11/29 Python
python使用openpyxl操作excel的方法步骤
2020/05/28 Python
Django之腾讯云短信的实现
2020/06/12 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
什么是属性访问器
2015/10/26 面试题
英文简历中的自我评价用语
2013/12/09 职场文书
工作过失检讨书
2014/02/23 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
阿甘正传观后感
2015/06/01 职场文书
2015小学音乐教师个人工作总结
2015/07/21 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书