- 本书赞誉
- 前言
- 第一部分 基础篇
- 第1章 系统基础信息模块详解
- 第2章 业务服务监控详解
- 第3章 定制业务质量报表详解
- 第4章 Python 与系统安全
- 第二部分 高级篇
- 第5章 系统批量运维管理器 pexpect 详解
- 第6章 系统批量运维管理器 paramiko 详解
- 第7章 系统批量运维管理器Fabric详解
- 第8章 从零开发一个轻量级 WebServer
- 第9章 集中化管理平台 Ansible 详解
- 第10章 集中化管理平台 Saltstack 详解
- 第11章 统一网络控制器 Func 详解
- 第12章 Python 大数据应用详解
- 第三部分 案例篇
- 第13章 从零开始打造 B/S 自动化运维平台
- 第14章 打造 Linux 系统安全审计功能
- 第15章 构建分布式质量监控平台
- 第16章 构建桌面版 C/S 自动化运维平台
11.3 自定义 Func 模块
Func自带的模块已经非常丰富,但在日常系统运维当中,尤其是面对大规模的服务器集群、不同类别的业务平台,此时Func自带的模块或许已经不能满足我们的需求,所以有必要通过自定模块来填补这块的不足。本节介绍一个简单的Func自定义模块的,通过采用Func自带的建模块工具func-create-module来现实。
(1)自定义模块步骤
如图11-3所示,自定义模块分为四个步骤进行,第一步生成模块,即通过fun-create-module命令创建模块初始模板;第二步编写逻辑,即填充我们的业务功能逻辑,生成模块;第三步分发模块,将编写完成的模块分发到所有被控主机;第四步执行已经分发完成的模块,调用方法与Func自带模块无差异。详细过程见图11-3。
图11-3 自定义模块发布流程
(2)生成模块
切换到Func安装包minion模块存储目录。笔者使用的是系统自带的Python 2.6,具体路径为/usr/lib/python2.6/site-packages/func/minion/modules。
# cd /usr/lib/python2.6/site-packages/func/minion/modules
运行创建模块命令func-create-module,根据图11-14填写相关信息。
图11-4 创建模块时填写的信息
最终生成了一个初始化的模块代码文件mymodule.py:
【/usr/lib/python2.6/site-packages/func/minion/modules/mymodule.py】
# # Copyright 2014 # liutiansi <liutiansi@gmail.com> # # This software may be freely redistributed under the terms of the GNU # general public license. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import func_module class Mymodule(func_module.FuncModule): # Update these if need be. version = "0.0.1" api_version = "0.0.1" description = "My module for func." def echo(self): """ TODO: Document me ... """ pass
(3)编写逻辑
这一步只需在上述模块基础上做修改即可,如模块实现一个根据指定的条数返回最新系统日志(/var/log/messages)信息,修改后的代码如下:
【/usr/lib/python2.6/site-packages/func/minion/modules/mymodule.py】
# # Copyright 2010 # liutiansi <liutiansi@gmail.com> # # This software may be freely redistributed under the terms of the GNU # general public license. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import func_module from func.minion import sub_process class Mymodule(func_module.FuncModule): # Update these if need be. version = "0.0.1" api_version = "0.0.1" description = "My module for func." def echo(self,vcount): """ TODO: response system messages info """ command="/usr/bin/tail -n "+str(vcount)+" /var/log/messages" cmdref = sub_process.Popen(command, stdout=sub_process.PIPE, stderr=sub_process.PIPE, shell=True, close_fds=True) data = cmdref.communicate return (cmdref.returncode, data[0], data[1])
(4)分发模块
首先编写分发模块的功能,使用Func的copyfile模块来实现,原理比较简单,即读取主控端func minion包下的模块文件(参数传入),通过Func的copyfile模块同步到目标主机的同路径下。一次编写可持续使用,源码如下:
【/home/test/func/RsyncModule.py】
#!/usr/bin/python import sys import func.overlord.client as fc import xmlrpclib module = sys.argv[1] pythonmodulepath="/usr/lib/python2.6/site-packages/func/minion/modules/" client = fc.Client("*") fb = file(pythonmodulepath+module, "r").read data = xmlrpclib.Binary(fb) #分发模块 print client.copyfile.copyfile(pythonmodulepath+ module,data) #重启Func服务 print client.command.run("/etc/init.d/funcd restart")
分发模块的运行结果如图11-5所示。
图11-5 模块分发结果
检查被控主机/usr/lib/python2.6/site-packages/func/minion/modules目录是否多了一个mymodule.py文件,是则说明模块已经成功分发。
(5)执行模块
最后,执行模块及返回结果见图11-6。
图11-6 执行模块结果
正常返回了5条/var/log/messages信息,完成了自定义模块的全过程。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论