锐速官方论坛 - ServerSpeeder,全球领先TCP加速技术,源于2006!

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1602|回复: 0

salt stack 自定义编写modules和自定返回处理returners

[复制链接] [已阅至1楼]

20

主题

23

帖子

100

积分

注册会员

Rank: 2

积分
100
发表于 2015-2-16 17:45:51 | 显示全部楼层 |阅读模式
Salt编写自定模块:
官网文档:http://docs.saltstack.com/ref/modules/index.html#grains-data

Master上创建存放模块的目录:
mkdir -pv /srv/salt/_modules
cd /srv/salt/_modules

编写一个简单的模块 xzr.py:
[root@host109 _modules]# cat xzr.py
#coding:utf-8
import random
def test():
'''随机一个1到100的数为双数就返回True'''
return random.randint(1,100)%2==0
def  echo(text):
return text
def myscript(*t,**kv):
'''引用salt本身的模块'''
ret = __salt__['cmd.script'](*t,**kv)
return ret

同步master上的自定模块到minion 上:
同步前最好在本机运行一下,看有没错误
[root@host109 _modules]# salt '*'  saltutil.sync_modules
host100:
- modules.xzr
host101:
- modules.xzr

运行自定义模块:
[root@host109 _modules]# salt '*' xzr.test
host101:
False
host100:
True

修改一下模块里的test函数让他输出为字符串:
#coding:utf-8
import random
#定义输出格式,不定义的话默认为字典
__outputter__ = {
'test': 'txt'
}
def test():
'''随机一个1到100的数为双数就返回True'''
return random.randint(1,100)%2==0
def  echo(text):
return text
def myscript(*t,**kv):
'''引用salt本身的模块'''
ret = __salt__['cmd.script'](*t,**kv)
return ret

修改后再次运行:
[root@host109 _modules]# salt '*' xzr.test
host101: False
host100: False
在这里查看更多模块信息:
https://github.com/saltstack/salt/tree/master/salt/modules


编写自定返回处理Returners:
Returners可以让客户端把模块执行的返回结果在本机额外处理。

官方文档:
http://docs.saltstack.com/ref/returners/index.html

和自定模块一样在/srv下新建存放Returners的目录_
mkdir -pv /srv/salt/_returnerscd  /srv/salt/_returners

编写一个返回处理,返回处理的函数名必须为returner:
[root@host109 _returners]# cat my_returners.py#coding:utf-8

def __virtual__():
'''调用时的名字'''
return 'writefile'

def returner(ret):
'''简单的把返回结果写到文件里'''
f = open('/tmp/salt_return','a+')
f.write(str(ret))
#f.write(str(ret['return']))
f.close()

同步returners
[root@host109 _returners]# salt '*'  saltutil.sync_returnershost101:
- returners.my_returners
host100:
- returners.my_returners

执行模块时加入上—return使用返回处理,可使用多个用逗号分开。
[root@host109 _returners]# salt '*'  xzr.test --return writefilehost101: False
host100: True

去客户端那边看下,写入的是一个字典:
[root@host100 ~]# cat /tmp/salt_return{'jid': '20131024040453764597', 'return': True, 'retcode': 0, 'success': True, 'fun': 'xzr.test', 'id': 'host100'}
键return就是我们的模块的返回结果。

再看下别的机器:
[root@host109 _returners]# salt '*'  cmd.run 'cat /tmp/salt_return'host100:
{'jid': '20131024040453764597', 'return': True, 'retcode': 0, 'success': True, 'fun': 'xzr.test', 'id': 'host100'}
host101:
{'jid': '20131024040453764597', 'return': False, 'retcode': 0, 'success': True, 'fun': 'xzr.test', 'id': 'host101'}

官方的returners参考:
https://github.com/saltstack/salt/tree/develop/salt/returners

小结:
使用salt的自定模块和返回处理,只要写一个监控主机的状态的模块(salt自带很多获取主机信息的模块),再把模块的返回结果入数据库,这样就可以轻松实现分布式的监控。
管理员已阅至此楼
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Server Speeder Forum  

GMT+8, 2018-5-26 20:05 , Processed in 0.018571 second(s), 18 queries , Xcache On.

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表