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中使用摄像头实现简单的延时摄影技术
Mar 27 Python
关于Python中异常(Exception)的汇总
Jan 18 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
Python中执行存储过程及获取存储过程返回值的方法
Oct 07 Python
TensorFlow入门使用 tf.train.Saver()保存模型
Apr 24 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
Jun 27 Python
Django xadmin开启搜索功能的实现
Nov 15 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
Mar 23 Python
Python基于jieba, wordcloud库生成中文词云
May 13 Python
Python3 用matplotlib绘制sigmoid函数的案例
Dec 11 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
Jan 24 Python
python井字棋游戏实现人机对战
Apr 28 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
从Web查询数据库之PHP与MySQL篇
2009/09/25 PHP
PHP文件操作实现代码分享
2011/09/01 PHP
PHP模块memcached使用指南
2014/12/08 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
Python创建系统目录的方法
2015/03/11 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
HTML5新增的8类INPUT输入类型介绍
2015/07/06 HTML / CSS
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
创业计划书的写作技巧及要点
2014/01/31 职场文书
学习十八大报告感言
2014/02/04 职场文书
楼面部长岗位职责范本
2014/02/14 职场文书
工地安全质量标语
2014/06/07 职场文书
学校班班通实施方案
2014/06/11 职场文书
法人授权委托书
2014/09/16 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
用python实现监控视频人数统计
2021/05/21 Python