编写Func自定义模块[原创] 不指定

刘天斯 , 2010/05/31 11:54 , Func , 评论(9) , 阅读(31740) , Via 本站原创 | |
      Func是目前redhat系列平台最棒的集群管理工具(个人看法),发现越来越多的人已经开始在使用,从接触的大部分人都会说自带的模块已经够用了。其实在我们的日常维护当中,尤其是大规模的服务器集群、满天飞的业务系统等等。此时Func自带的模块已经远远不能满足我们的需求,现介绍Func是如何实现一个简单的自定义模块的。

[方法一]
通过CommandModule来实现,只需修改要运行命令参数就可以了。

优点:简单、部署方便;
缺点:不够灵活,扩展性弱;
适合场景:中小型集群;

命令方式:

python api方式:

[方法二]
通过编写func模块来达到扩展的目的。

优点:可以根据自身的应用特点定制,扩展性非常强;
缺点:复杂、部署不够方便;
适合场景:大型集群;

操作:
1、模块存放位置说明
/usr/local/lib/python2.5/site-packages/func/minion/modules/(源码安装位置)
or
/usr/local/python2.5/site-packages/func/minion/modules/(rpm或yum安装默认位置)

2、func-create-module 建模块工具
填写相关项,比较简单就不一一说明了。
#cd /usr/local/lib/python2.5/site-packages/func/minion/modules
#func-create-module
引用

Module Name: MyModule
Description: My module for func.
Author: liutiansi
Email: liutiansi@gmail.com

Leave blank to finish.
Method: echo
Method:
Your module is ready to be hacked on. Wrote out to mymodule.py.


3、编写模块代码
#vi mymodule.py

系统已经帮我们自动生成了一些初始化代码,只需在此基础上做修改就可以了。如简单根据我们指定的条数返回最新系统日志,修改后的代码如下:

4、编写模块分发功能
#cd ~
#vi RsyncModule.py

#python RsyncModule.py mymodule.py
引用

{'NN-server1': 1}
{'NN-server1': [0, 'Stopping func daemon: \nStarting func daemon: \n', '']}
................

5、模块调用
func -t 10 "*" call mymodule echo 10
引用

{'NN-server1': [0,
                   'May 30 04:02:06 SN2010-04-020 syslogd 1.4.1: restart.\n',
                   '']}


大功告成!dog

如大家有什么疑问或感兴趣的话题可以通过weibo与我交流:http://t.qq.com/yorkoliu
Tags: ,
hihi
2015/03/10 17:03
运行func "*" ping 是OK。但是运行其他就报错:func "func.slave.server.com" call command run"date"{'func.slave.server.com': ['REMOTE_ERROR',                           'func.minion.codes.InvalidMethodException',                           '',                           '  File "/usr/lib/python2.6/site-packages/func/minion/server.py", line 261, in _dispatch\n    return self.get_dispatch_method(method)(*params)\n   File "/usr/lib/python2.6/site-packages/func/minion/server.py", line 129, in get_dispatch_method\n    raise codes.InvalidMethodException\n']}好纠结啊
five
2015/01/07 03:35
天斯,这个关于json的问题帮忙看下吧,搞了好久 没找到原因Traceback (most recent call last):  File "/usr/bin/ansible", line 196, in <module>    (runner, results) = cli.run(options, args)  File "/usr/bin/ansible", line 114, in run    inventory_manager = inventory.Inventory(options.inventory, vault_password=vault_pass)  File "/usr/lib/python2.6/site-packages/ansible/inventory/__init__.py", line 118, in __init__    self.parser = InventoryScript(filename=host_list)  File "/usr/lib/python2.6/site-packages/ansible/inventory/script.py", line 49, in __init__    self.groups = self._parse(stderr)  File "/usr/lib/python2.6/site-packages/ansible/inventory/script.py", line 57, in _parse    self.raw  = utils.parse_json(self.data)  File "/usr/lib/python2.6/site-packages/ansible/utils/__init__.py", line 552, in parse_json    results = json.loads(data)  File "/usr/lib64/python2.6/json/__init__.py", line 307, in loads    return _default_decoder.decode(s)  File "/usr/lib64/python2.6/json/decoder.py", line 319, in decode    obj, end = self.raw_decode(s, idx=_w(s, 0).end())  File "/usr/lib64/python2.6/json/decoder.py", line 338, in raw_decode    raise ValueError("No JSON object could be decoded")ValueError: No JSON object could be decoded
five
2014/12/30 02:41
api模式的怎么运行啊
刘天斯 回复于 2014/12/30 23:46
运行编写好的api python脚本即可。
菜鸟
2011/10/18 18:10
您好:   我现在的情况是这样的,装完func(func 的master  clinte都已经启动成功),执行func ‘*’ ping 执行成功,但是总是提示 。。。“svc”。我检查自己的python的版本后发现是2.4的,升级python 到2.7 后重启报错;Traceback (most recent call last):  File "/usr/bin/func", line 19, in <module>    from func.CommonErrors import Func_Client_ExceptionImportError: No module named func.CommonErrors
stranger
2011/03/09 16:26
不好意思,前面我说的不详细了!
是我运行func "*" ping 已经提示 ok了
但是在运行其他命令才会提示这个,例如:
func "funcslave1" call cammand run "date"
刘天斯 回复于 2011/03/09 17:57
is "command" not "cammand" :)
stranger
2011/03/09 14:13
你好,我现在的python版本是2.5的   func版本是按照你平台提供的网址下载
运行func "*" ping 已经成功了  
但是提示
['REMOTE_ERROR',
               'func.minion.codes.InvalidMethodException',
               '',
               '  File "/usr/local/lib/python2.5/site-packages/func/minion/server.py", line 261, in _dispatchn    return self.get_dispatch_method(method)(*params)n   File "/usr/local/lib/python2.5/site-packages/func/minion/server.py", line 129, in get_dispatch_methodn    raise codes.InvalidMethodExceptionn']}
想请问下是什么原因
刘天斯 回复于 2011/03/09 15:36
不是很明白你的问题,运行成功了为什么还提示这个信息?
路过
2010/11/23 17:38
func里面能不能控制一条命令执行次数。比如我现在写了一个脚本我只希望它只执行一次。结果我func 跑了两次。能控制不?
刘天斯 回复于 2010/11/23 20:39
默认只执行一次,请检查相关配置。
路人甲
2010/11/23 09:55
/usr/bin/func "client1..com" call --forks="5" command run "date"
正常的。可以ping通
刘天斯 回复于 2010/11/23 10:43
请升级到py2.5并安装func for py2.5的包。
路人甲
2010/11/22 18:01
我有一台certmaster带两台slave.其中一台我是用yum安装的python版本2.4
另外一台是用源码安装也是python2.4
但是当我执行到:func -t 10 "*" call mymodule echo 10
那台yum安装的正常了源码安装的就不正常报:
['REMOTE_ERROR',
                        'func.minion.codes.InvalidMethodException',
                        '',
                        '  File "/usr/lib/python2.3/site-packages/func/minion/server.py", line 261, in _dispatc
h\n    return self.get_dispatch_method(method)(*params)\n   File "/usr/lib/python2.3/site-packages/func/minion/
server.py", line 129, in get_dispatch_method\n    raise codes.InvalidMethodException\n']}
清楚是什么原因不?
刘天斯 回复于 2010/11/23 00:29
先尝试func "hostname" ping是否通。
分页: 1/1 第一页 1 最后页
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]