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中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
python下如何查询CS反恐精英的服务器信息
Jan 17 Python
mysql 之通过配置文件链接数据库
Aug 12 Python
python使用Matplotlib画饼图
Sep 25 Python
Python设计模式之模板方法模式实例详解
Jan 17 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
Django基础知识 web框架的本质详解
Jul 18 Python
python实现按关键字筛选日志文件
Dec 24 Python
jupyter notebook 多环境conda kernel配置方式
Apr 10 Python
Python之字典添加元素的几种方法
Sep 30 Python
python正则表达式re.search()的基本使用教程
May 21 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
Jun 11 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
《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
设定php简写功能的方法
2019/11/28 PHP
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
js select option对象小结
2013/12/20 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
15个顶级开源JavaScript框架和库
2018/10/10 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
js实现导航跟随效果
2018/11/17 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
js String.prototype.trim字符去前后空格的扩展
2020/08/23 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
Python简单的制作图片验证码实例
2017/05/31 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
介绍一下linux的文件权限
2012/02/15 面试题
2014两会学习心得:榜样精神伴我行
2014/03/17 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
2015年物业管理工作总结
2015/04/23 职场文书
升学宴祝酒词
2015/08/11 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫