A-A+

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

2013年10月24日 自动化运维 暂无评论 阅读 22,042 views 次

 

 

因为图片太多,这个博客又不能直接从word时面把图片复制过来,所以我也懒得上传图片了

完整的文档,可点击这里下载:salt运维工具入门文档_V1.4(PDF文档为目前较新资料)

 

 

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自带很多获取主机信息的模块),再把模块的返回结果入数据库,这样就可以轻松实现分布式的监控。

 

 

参考资料:

http://wiki.saltstack.cn/docs

http://www.shencan.net/

关键词:

给我留言

Copyright © linux系统运维 保留所有权利.   Theme  Ality 粤ICP备13023035号-1

用户登录

分享到: