设为首页 收藏本站
查看: 4921|回复: 1

[经验分享] 【saltstack学习笔记之五】salt的event接口

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-5-19 08:19:52 | 显示全部楼层 |阅读模式
  • event是一个本地的ZeroMQ PUB Interface,event是一个开放的系统,用于发送信息通知salt或其他的操作系统。每个event都有一个标签。事件标签允许快速制定过滤事件。除了标签之外,每个事件都有一个数据结构。这个数据结构是一个dict类型,其中包含关于事件的信息。
  • 在master上直接将返回结果写入mysql
        1.event接口测试
            测试脚本salt-event.py内容如下:
               import salt.utils.event
               event = salt.utils.event.MasterEvent('/var/run/salt/master')
               for data in event.iter_events(full=True):
                   print data
                   print '------'
            python salt-event.py    //执行这个脚本
            然后再开一个新的master终端进行salt操作:
                salt '*' test.ping
            就可以看到返回结果了。结果正常应该如下:
    {'tag': 'salt/event/new_client', 'data': {'_stamp': '2015-05-18T15:59:56.010670'}}
    ------
    {'tag': '20150518235956026979', 'data': {'_stamp': '2015-05-18T15:59:56.027668', 'minions': ['Admin2-saltstack.littlebee.com', 'Admin3-saltstack.littlebee.com']}}
    ------
    {'tag': 'salt/job/20150518235956026979/new', 'data': {'tgt_type': 'glob', 'jid': '20150518235956026979', 'tgt': '*', '_stamp': '2015-05-18T15:59:56.029385', 'user': 'root', 'arg': [], 'fun': 'test.ping', 'minions': ['Admin2-saltstack.littlebee.com', 'Admin3-saltstack.littlebee.com']}}
    ------
    {'tag': 'salt/job/20150518235956026979/ret/Admin2-saltstack.littlebee.com', 'data': {'fun_args': [], 'jid': '20150518235956026979', 'return': True, 'retcode': 0, 'success': True, 'cmd': '_return', '_stamp': '2015-05-18T15:59:56.086006', 'fun': 'test.ping', 'id': 'Admin2-saltstack.littlebee.com'}}
    ------
    {'tag': 'salt/job/20150518235956026979/ret/Admin3-saltstack.littlebee.com', 'data': {'fun_args': [], 'jid': '20150518235956026979', 'return': True, 'retcode': 0, 'success': True, 'cmd': '_return', '_stamp': '2015-05-18T15:59:56.088761', 'fun': 'test.ping', 'id': 'Admin3-saltstack.littlebee.com'}}
    ------
            至此event接口测试结束,测试证明event接口是能正常工作的。
        2.编写自定义return脚本
            vim salt_event_to_mysql.py
    #!/bin/env python
    #coding=utf8
  • # Import python libs
    import json
  • # Import salt modules
    import salt.config
    import salt.utils.event
  • # Import third part libs
    import MySQLdb
  • __opts__ = salt.config.client_config('/etc/salt/master')
  • #create MySQL connect
    conn = MySQLdb.connect(host=__opts__['mysql.host'],user=__opts__['mysql.user'],passwd=__opts__['mysql.pass'],db=__opts__['mysql.db'],port=__opts__['mysql.port'])
    cursor = conn.cursor()
  • # Listen Salt Master Event System
    event = salt.utils.event.MasterEvent(__opts__['sock_dir'])
    for eachevent in event.iter_events(full=True):
        ret = eachevent['data']
        if "salt/job/" in eachevent['tag']:
            #Return Event
            if ret.has_key('id') and ret.has_key('return'):
                #Ignore saltutil.find_job event
                if ret['fun'] == "saltutil.find_job":
                    continue
                sql = '''INSERT INTO `salt_returns`
                    (`fun`,`jid`,`return`,`id`,`success`,`full_ret` )
                    VALUES (%s,%s,%s,%s,%s,%s)'''
                cursor.execute(sql,(ret['fun'],ret['jid'],
                                    json.dumps(ret['return']),ret['id'],
                                    ret['success'],json.dumps(ret)))
                cursor.execute("COMMIT")
        # Other Event
        else:
            pass
    保存退出
        3.修改master的配置文件
            vim /etc/salt/master
            mysql.host: '192.168.1.105'    //mysql服务器的IP地址
            mysql.user: 'salt'    //mysql数据库的用户名,需要跟后面授权的用户名一致
            mysql.pass: 'salt'    //mysql数据库的密码,需要跟后面授权的密码一致
            mysql.db: 'salt'    //mysql数据库的名称
            mysql.port: 3306    //使用端口为3306
        保存退出
        4.在master上安装MySQL-python
            yum -y install MySQL-python
        5.在master的后台执行自定义return脚本
            python salt_event_to_mysql.py &
        6.开一个新的master终端进行测试
            salt '*' test.ping
        7.在mysql上看是否已经将数据写入数据库
            mysql -uroot -p
            输入密码之后进入mysql数据库
            use salt
            show tables;
            select * from salt_returns \G
            如果出现如下结果表示插入成功:
    *************************** 11. row ***************************
         fun: test.ping
         jid: 20150519004647663439
      return: true
          id: Admin2-saltstack.littlebee.com
    success: 1
    full_ret: {"fun_args": [], "jid": "20150519004647663439", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2015-05-18T16:46:47.729339", "fun": "test.ping", "id": "Admin2-saltstack.littlebee.com"}
    *************************** 12. row ***************************
         fun: test.ping
         jid: 20150519004647663439
      return: true
          id: Admin2-saltstack.littlebee.com
    success: 1
    full_ret: {"fun_args": [], "jid": "20150519004647663439", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2015-05-18T16:46:47.729339", "fun": "test.ping", "id": "Admin2-saltstack.littlebee.com"}
    *************************** 13. row ***************************
         fun: test.ping
         jid: 20150519004647663439
      return: true
          id: Admin3-saltstack.littlebee.com
    success: 1
    full_ret: {"fun_args": [], "jid": "20150519004647663439", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2015-05-18T16:46:47.732864", "fun": "test.ping", "id": "Admin3-saltstack.littlebee.com"}
    *************************** 14. row ***************************
         fun: test.ping
         jid: 20150519004647663439
      return: true
          id: Admin3-saltstack.littlebee.com
    success: 1
    full_ret: {"fun_args": [], "jid": "20150519004647663439", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2015-05-18T16:46:47.732864", "fun": "test.ping", "id": "Admin3-saltstack.littlebee.com"}
    14 rows in set (0.00 sec)



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-68309-1-1.html 上篇帖子: 【saltstack学习系列之四】saltstack的returner 下篇帖子: 【saltstack学习笔记之六】salt的分组 接口
累计签到:13 天
连续签到:1 天
发表于 2016-4-14 19:56:07 | 显示全部楼层
  哥们,为什么我的event.py  有输出,但是mysql没有写入呀, 能帮忙看下么

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

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

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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