简介

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:自定义模块的更多相关文章

  1. python-Day5-深入正则表达式--冒泡排序-时间复杂度 --常用模块学习:自定义模块--random模块:随机验证码--time & datetime模块

    正则表达式   语法:             mport re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹配,[0 ...

  2. NancyFx 2.0的开源框架的使用-CustomModule(自定义模块)

    NancyFx框架的自定义模块 新建一个空的Web项目 然后通过NuGet库安装下面的包 Nancy Nancy.Hosting.Aspnet 然后添加Models,Module,Views三个文件夹 ...

  3. Python爬虫与数据分析之模块:内置模块、开源模块、自定义模块

    专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...

  4. Android图片加载框架最全解析(六),探究Glide的自定义模块功能

    不知不觉中,我们的Glide系列教程已经到了第六篇了,距离第一篇Glide的基本用法发布已经过去了半年的时间.在这半年中,我们通过用法讲解和源码分析配合学习的方式,将Glide的方方面面都研究了个遍, ...

  5. Python基础笔记系列十:模块

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 模块 #1.类比于java中的jar包,模块能让你能够有逻辑地组织你的Py ...

  6. python模块知识一 自定义模块、time、datetime时间模块

    第五章 模块 1.自定义模块: 模块分类: 内置模块(标准库)-- python解释器自带的.py文件(模块) 第三方模块(各种大神写的)-- 需要额外下载(并发编程pypi) 自定义模块(自己写的) ...

  7. day16——自定义模块、time、datetime、random

    day16 自定义模块 自定义一个模块 import :导入(拿工具箱) # import test # test.func() 导入发生的事情 在当前的名称空间中开辟一个新的空间 将模块中所有的代码 ...

  8. 自定义模块,time,datetime以及random

    自定义模块,time,datetime以及random 1.自定义模块 自定义一个模块 import #导入 (拿工具箱) 模块分类 1.内置模块(标准库) --python解释器自带的.py文件(模 ...

  9. 从入门到自闭之Python自定义模块

    自定义模块 定义:一个文件就是一个模块(能被调用的文件,模块就是一个工具箱,工具就是函数) 作用: 将代码文家化管理,提高可读性,避免重复代码 拿来就用(避免重复造轮子),python中类库比较多,提 ...

随机推荐

  1. [转载] C++ string, const char*, char* 之间互相转换

    1, string转const char* 类型 string str = "abcdef"; const char* con_str = string.c_str() 2, co ...

  2. Java-->将txt文件的所有行反转

    --> 这里和上次代码不同,对同一文件进行操作,所以要用到一个第三方容器来存储数据 package com.dragon.java.filereverseline; import java.io ...

  3. abap append 用法

    [转自http://blog.chinaunix.net/uid-7982817-id-91999.html]Append用法总结 2008-11-14 11:42:19 分类: Syntax APP ...

  4. TextView文字滚动效果

    ScrollText.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...

  5. CSS基础知识点(二)——居中

    水平居中 (1) 对于块级元素,最常用的自适应水平居中为:margin:0px auto; (与 margin:auto; 效果相同) (2) 对于行内元素(a, img, input等),最常用的水 ...

  6. eclipse项目导入到android studio

    只需要添加gradle文件,在里面添加如下代码片段------------------------------------------- main { manifest.srcFile 'Androi ...

  7. linux下c语言实现计算磁盘剩余空间

    #include <sys/statfs.h> unsigned ; size_t mbFreedisk = ; unsigned ; size_t mbTotalsize = ; str ...

  8. Linux目录规范和含义(转)

      Linux目录配置 在了解了每个文件的相关种类与属性,以及了解了如何更改文件属性/权限的相关信息后,再来要了解的就是, 为什么每套Linux distributions他们的配置文件啊.执行文件啊 ...

  9. 常见半监督方法 (SSL) 代码总结

    经典以及最新的半监督方法 (SSL) 代码总结 最近因为做实验需要,收集了一些半监督方法的代码,列出了一个清单: 1. NIPS 2015 Semi-Supervised Learning with ...

  10. caffe:编译时提示:unsupported GNU version! gcc versions later than 4.9 are not supported!

    NVCC src/caffe/solvers/adam_solver.cuIn file included from /usr/local/cuda/include/cuda_runtime.h:76 ...