salt stack 自定义编写modules和自定返回处理returners
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自带很多获取主机信息的模块),再把模块的返回结果入数据库,这样就可以轻松实现分布式的监控。
参考资料: