简介

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. 【转】MySQL命令

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

  2. Single Number-C++中的异或

    Single Number Given an array of integers, every element appears twice except for one. Find that sing ...

  3. sdust 2410 Mine Number

    今天看了3个这种题了  枚举第一行即可 #include<cstdio> #include<cstring> #include<iostream> #include ...

  4. 【字体区别】Serif和Sans Serif

    [字体区别]Serif和Sans Serif 在西方国家罗马字母阵营中,字体分为两大种类:Sans Serif和Serif,打字机体虽然也属于Sans Serif,但由于是等宽字体,所以另外独立出Mo ...

  5. 222. Count Complete Tree Nodes

    Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from W ...

  6. 310. Minimum Height Trees

    For a undirected graph with tree characteristics, we can choose any node as the root. The result gra ...

  7. javascript 基础学习教程

    http://www.itxueyuan.org/javascript/jiaocheng_2/

  8. html部分---格式与布局;

    一:position:fixed(相对于浏览器窗口来对元素进行定位) <style type="text/css"> .aa { position:fixed; lef ...

  9. leetcode 107 Binary Tree Level Order Traversal II ----- java

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  10. POJ 3114 Countries in War(强连通)(缩点)(最短路)

                                    Countries in War Time Limit: 1000MS   Memory Limit: 65536K Total Sub ...