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中常用检测字符串相关函数汇总
Apr 15 Python
利用Python的Django框架生成PDF文件的教程
Jul 22 Python
Python验证文件是否可读写代码分享
Dec 11 Python
http请求 request失败自动重新尝试代码示例
Jan 25 Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 Python
python使用pygame框架实现推箱子游戏
Nov 20 Python
python开发游戏的前期准备
May 05 Python
Python3 tkinter 实现文件读取及保存功能
Sep 12 Python
python 下载m3u8视频的示例代码
Nov 11 Python
Python爬虫之Selenium设置元素等待的方法
Dec 04 Python
Python爬虫基础讲解之请求
May 13 Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 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扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
php fsockopen解决办法 php实现多线程
2014/01/20 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
Jquery带搜索框的下拉菜单
2013/05/06 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
vue实现简单的日历效果
2020/09/24 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
Python基于回溯法子集树模板解决找零问题示例
2017/09/11 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
大学生通用个人的自我评价
2014/02/10 职场文书
高中军训感想300字
2014/03/04 职场文书
年终总结会主持词
2014/03/25 职场文书
校园活动宣传方案
2014/03/28 职场文书
python munch库的使用解析
2021/05/25 Python