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使用Flask框架获取用户IP地址的方法
Mar 21 Python
基于python的字节编译详解
Sep 20 Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 Python
深入了解Python枚举类型的相关知识
Jul 09 Python
Pycharm 2019 破解激活方法图文详解
Oct 11 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
python动态文本进度条的实例代码
Jan 22 Python
python程序文件扩展名知识点详解
Feb 27 Python
django美化后台django-suit的安装配置操作
Jul 12 Python
什么是Python装饰器?如何定义和使用?
Apr 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
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
分享PHP header函数使用教程
2013/09/05 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
解决Laravel自定义类引入和命名空间的问题
2019/10/15 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
AngularJS实现表格的增删改查(仅限前端)
2017/07/04 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
linux面试题参考答案(10)
2013/11/04 面试题
JAVA程序员面试题
2012/10/03 面试题
模范家庭事迹材料
2014/02/10 职场文书
个人实习生的自我评价
2014/02/16 职场文书
西双版纳导游词
2015/02/03 职场文书
小班上学期个人总结
2015/02/12 职场文书
运动会致辞稿
2015/07/29 职场文书
2016暑期政治学习心得体会
2016/01/23 职场文书
MySQL锁机制
2021/04/05 MySQL
7个关于Python的经典基础案例
2021/11/07 Python