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抽象基类用法实例分析
Jun 04 Python
Django中处理出错页面的方法
Jul 15 Python
python实现神经网络感知器算法
Dec 20 Python
利用Python如何生成便签图片详解
Jul 09 Python
在Pycharm中对代码进行注释和缩进的方法详解
Jan 20 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 Python
Python使用enumerate获取迭代元素下标
Feb 03 Python
pycharm 对代码做静态检查操作
Jun 09 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
Python的轻量级ORM框架peewee使用教程
Feb 05 Python
Elasticsearch 数据类型及管理
Apr 19 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发送post请求的三种方法
2014/02/11 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
IE事件对象(The Internet Explorer Event Object)
2012/06/27 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
js 颜色选择插件
2017/01/23 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
带你快速理解javascript中的事件模型
2017/08/14 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
关于layui导航栏不展示下拉列表的解决方法
2019/09/25 Javascript
python读写ini配置文件方法实例分析
2015/06/30 Python
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
两道JAVA笔试题
2016/09/14 面试题
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
大学生简短的自我评价
2014/09/12 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
入伍通知书
2015/04/23 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js