Func系列3:自定义模块
简介
Func自带的模块已经非常丰富,但在日常系统运维当中,尤其是面对大规模的服务器集群、不同类别的业务平台,次是Func自带的模块或许已经不能满足我们的需求,所以有必要通过自定义模块来填补这块的不足。
自定义模块的步骤
生成模块----->编写逻辑----->分发模块----->执行模块
生成模块:通过fun-create-module命令创建模块初始模板
编写逻辑:即填充我们的业务功能逻辑
分发模块:将编写完成的模块分发到所有被控主机
执行模块:执行已分发完成的模块,调用方法与Func自带模块无差异
生成模块
切换到Func安装包minion模块存储目录:/usr/lib/python2.6/site-packages/func/minion/modules/,执行命令fun-create-module创建模块
cd /usr/lib/python2.6/site-packages/func/minion/modules/
fun-create-module #后面就按照提示进行操作
结果:
[root@wx modules]# func-create-module
Module Name: MyModule
Description: My Module for func.
Author: Macolee Email: lihui__love@163.com Leave blank to finish.
Method: echo
Method:
Your module is ready to be hacked on. Wrote out to mymodule.py.
最终生成了一个初始化的模块代码文件mymodule.py
【/usr/lib/python2.6/site-packages/func/minion/modules/mymodule.py】
#
# Copyright 2016
# Macolee <lihui__love@163.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
编写逻辑
这一步只需在上述模块基础上修改即可,如模块实现一个根据指定的条数返回最新系统日志(/var/log/messages)信息,修改后代码如下:
【/usr/lib/python2.6/site-packages/func/minion/modules/mymodule.py】
#
# Copyright 2016
# Macolee <lihui__love@163.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,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])
分发模块
首先编写分发模块的功能,使用Func的copyfile模块来实现,原理是:读写主控端func minion包下的模块文件(参数传入),通过Func的copyfile模块同步到目标主机的同路径下。一次编写可持续使用。
【/home/test/func/RsyncModule.py】
#!/usr/bin/env python
#-*- coding:utf-8 -*- 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')
分发命令:
cd /home/test/func/
cp /usr/lib/python2.6/site-packages/func/minion/modules/mymodule.py /home/test/func/ python RsyncModule.py mymodule.py
检查被控主机的/usr/lib/python2.6/site-packages/func/minion/modules/目录是否多了一个mymodule.py文件,是则说明分发成功。
执行模块
func '*' call mymodule echo 5
参考资料:
根据刘天斯《Python自动化运维技术与最佳实践》整理
Func系列3:自定义模块的更多相关文章
- python-Day5-深入正则表达式--冒泡排序-时间复杂度 --常用模块学习:自定义模块--random模块:随机验证码--time & datetime模块
正则表达式 语法: mport re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹配,[0 ...
- NancyFx 2.0的开源框架的使用-CustomModule(自定义模块)
NancyFx框架的自定义模块 新建一个空的Web项目 然后通过NuGet库安装下面的包 Nancy Nancy.Hosting.Aspnet 然后添加Models,Module,Views三个文件夹 ...
- Python爬虫与数据分析之模块:内置模块、开源模块、自定义模块
专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...
- Android图片加载框架最全解析(六),探究Glide的自定义模块功能
不知不觉中,我们的Glide系列教程已经到了第六篇了,距离第一篇Glide的基本用法发布已经过去了半年的时间.在这半年中,我们通过用法讲解和源码分析配合学习的方式,将Glide的方方面面都研究了个遍, ...
- Python基础笔记系列十:模块
本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 模块 #1.类比于java中的jar包,模块能让你能够有逻辑地组织你的Py ...
- python模块知识一 自定义模块、time、datetime时间模块
第五章 模块 1.自定义模块: 模块分类: 内置模块(标准库)-- python解释器自带的.py文件(模块) 第三方模块(各种大神写的)-- 需要额外下载(并发编程pypi) 自定义模块(自己写的) ...
- day16——自定义模块、time、datetime、random
day16 自定义模块 自定义一个模块 import :导入(拿工具箱) # import test # test.func() 导入发生的事情 在当前的名称空间中开辟一个新的空间 将模块中所有的代码 ...
- 自定义模块,time,datetime以及random
自定义模块,time,datetime以及random 1.自定义模块 自定义一个模块 import #导入 (拿工具箱) 模块分类 1.内置模块(标准库) --python解释器自带的.py文件(模 ...
- 从入门到自闭之Python自定义模块
自定义模块 定义:一个文件就是一个模块(能被调用的文件,模块就是一个工具箱,工具就是函数) 作用: 将代码文家化管理,提高可读性,避免重复代码 拿来就用(避免重复造轮子),python中类库比较多,提 ...
随机推荐
- python 文件操作,seek, tell, name...
可以设置文件当前位置偏移 fileObject.seek(offset [, whence]) offset 文件的读/写指针位置 whence 可选,默认0,相对于文件开始的位置. 1, 相对于目前 ...
- linux安装phpredis扩展
1.下载扩展安装包 wget https://github.com/nicolasff/phpredis/downloads 2.解压 tar -zxvf nicolasff-phpredis-2 ...
- 刚查了,Z3795不支持EPT,即WP8开发必须的SLAT,看来只能作为简单的WINDOWS备机了
刚查了,Z3795不支持EPT,即WP8开发必须的SLAT,看来只能作为简单的WINDOWS备机了,也就只能做做文档编辑,脚本编写之类的. 数据来源 http://ark.intel.com/zh-C ...
- mysql最大连接数
通常,mysql的最大连接数默认是100, 最大可以达到16384.1.查看最大连接数:show variables like '%max_connections%';2.修改最大连接数方法一:修改配 ...
- windows下apache及mysql定时自动重启设置
有时候觉得,服务器运行时间过长,造成服务器内存等压力过大.因此,不用重新启动服务器的情况下,完成apache和mysql的内存释放,是非常有益处的(把重启时间设置在访问量最低的).首先,apache的 ...
- C函数及指针学习2
1.break 永久终止循环,continue 结束当前循环 2.switch 每个case标签要有唯一值,(且为常量或常量表达式) 不加break 时执行流会贯穿整个case 标签 3 赋值操作符 ...
- eclipse常用插件在线安装地址或下载地址
本文转载自:http://my.oschina.net/bloghu/blog/198922 一,反编译插件: A.Jadclipse 1.打开eclipse增加站点:http://jadclipse ...
- DNS-解析、劫持、污染
DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工 ...
- Python-正则零宽断言及命名捕获(类PHP)
(一)零宽断言 说明:本文的例子使用python描述 首先说明一下什么是零宽断言,所谓零宽断言就是并不去真正的匹配字符串文本,而仅仅是匹配对应的位置. 正则表达式中有很多这样的断言 ...
- C++中智能指针的设计和使用
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7561235 智能指针(smart pointer)是存储指向动态分配(堆 ...