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小技巧分享
Nov 22 Python
Python操作CouchDB数据库简单示例
Mar 10 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
python通过cookie模拟已登录状态的初步研究
Nov 09 Python
Python算法应用实战之栈详解
Feb 04 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
Django框架的使用教程路由请求响应的方法
Jul 03 Python
Django框架搭建的简易图书信息网站案例
May 25 Python
python实现画出e指数函数的图像
Nov 21 Python
Pytorch实现神经网络的分类方式
Jan 08 Python
使用Django清空数据库并重新生成
Apr 03 Python
Python 数据科学 Matplotlib图库详解
Jul 07 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之require/include顺序 推荐
2011/01/02 PHP
用PHP代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
JS操作数据库的实例代码
2013/10/17 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
深入了解js原型模式
2019/05/30 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
分享6个隐藏的python功能
2017/12/07 Python
pandas值替换方法
2018/07/10 Python
selenium在执行phantomjs的API并获取执行结果的方法
2018/12/17 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
解决python flask中config配置管理的问题
2019/07/26 Python
pytorch 共享参数的示例
2019/08/17 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
Python(PyS60)实现简单语音整点报时
2019/11/18 Python
python实现名片管理器的示例代码
2019/12/17 Python
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
中科创达面试题
2016/12/28 面试题
建筑工程实习自我鉴定
2013/09/19 职场文书
大学毕业生的自我鉴定
2013/11/30 职场文书
单位领导证婚词
2014/01/14 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
医学检验专业自荐信
2014/09/18 职场文书
面试感谢信范文
2015/01/22 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书