【saltstack学习笔记之五】salt的event接口

  1. event是一个本地的ZeroMQ PUB Interface,event是一个开放的系统,用于发送信息通知salt或其他的操作系统。每个event都有一个标签。事件标签允许快速制定过滤事件。除了标签之外,每个事件都有一个数据结构。这个数据结构是一个dict类型,其中包含关于事件的信息。
  2. 在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
  3. # Import python libs
    import json
  4. # Import salt modules
    import salt.config
    import salt.utils.event
  5. # Import third part libs
    import MySQLdb
  6. __opts__ = salt.config.client_config(‘/etc/salt/master‘)
  7. #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()
  8. # 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)
时间: 2024-08-07 21:20:09

【saltstack学习笔记之五】salt的event接口的相关文章

SaltStack 学习笔记 - 第十二篇: SaltStack Web 界面

SaltStack 有自身的用python开发的web界面halite,好处是基于python,可以跟salt的api无缝配合,确定就比较明显,需要个性化对web界面进行定制的会比较麻烦,如果喜欢体验该界面的可以参考下面的文章  http://rfyiamcool.blog.51cto.com/1030776/1275443/ 我是运用另一个python+php来进行web开发,具体需要的工具有在我的另一篇文章里面介绍过,这里再重新进行整个开发介绍 首先介绍php 跟python通信的工具 pp

Saltstack学习笔记(2)

1.5 Salt  命令介绍(常用的这些一定要多练习) 命令           功能描述 salt           Salt 主命令,比如执行命令模块 satl-cp        复制文件到指定的系统上去 salt-key       和 Minion 之间进行身份验证 salt-master    Master 主守护进程,用于控制 Minion salt-run       前端命令执行 salt-syndic    Salt syndic 守护进程,用于多级 salt-master

MySQL学习笔记之五 有关数据表操作

MySQL在创建表的时候,创建一个.frm文件保存表和列定义.索引存储在一个有.MYI(MYindex)扩展名的文件并且数据存储在有.MYD(MYData)扩展名的文件中.   一.用SHOW/ DESCRIBE语句显示数据表的信息 语法: SHOW TABLES [FROM db_name] [LIKE wild] or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild] or SHOW INDEX FROM tbl_name [FROM

Citrix XenMobile学习笔记之五:XenMoble架构组件

XenMobile Enterprise包含了电子邮件和网页浏览等安全的移动生产应用程序,并且保障档共享.同步处理和编辑的安全.Citrix凭借这个无可比拟的整合式移动服务,成功在企业移动办公市场上脱颖而出,傲视同侪. 现今的工作模式讲求从各种移动装置上安全和顺利地存取应用程序与资料.员工则需从易用的统一化企业app store,获取移动.Windows.网络及软件即服务(Software as a service,SaaS)应用程序.员工需要能够随时随地检视.编辑.同步处理和分享资料,并在各种

linux网络编程学习笔记之五 -----并发机制与线程?

进程线程分配方式 简述下常见的进程和线程分配方式:(好吧,我仅仅是举几个样例作为笔记...并发的水太深了,不敢妄谈...) 1.进程线程预分配 简言之,当I/O开销大于计算开销且并发量较大时,为了节省每次都要创建和销毁进程和线程的开销.能够在请求到达前预先进行分配. 2.进程线程延迟分配 预分配节省了处理时的负担,但操作系统管理这些进程线程也会带来一定的开销.由此,有个折中的方法是,当某个处理须要花费较长时间的时候,我们创建一个并发的进程或线程来处理该请求.实现也非常easy,在主线程中定时,定

linux网络编程学习笔记之五 -----并发机制与线程池

进程线程分配方式 简述下常见的进程和线程分配方式:(好吧,我只是举几个例子作为笔记...并发的水太深了,不敢妄谈...) 1.进程线程预分配 简言之,当I/O开销大于计算开销且并发量较大时,为了节省每次都要创建和销毁进程和线程的开销.可以在请求到达前预先进行分配. 2.进程线程延迟分配 预分配节省了处理时的负担,但操作系统管理这些进程线程也会带来一定的开销.由此,有个折中的方法是,当某个处理需要花费较长时间的时候,我们创建一个并发的进程或线程来处理该请求.实现也很简单,在主线程中定时,定时到期,

马哥Linux学习笔记之五——邮件服务

1.SMTP只负责将邮件发送到服务器,其他的,像身份认证检测邮件,都不能完成.(25/tcp) ESMTP:Extended SMTP POP3:Post Office Protocol IMAP4:Internet Mail Access Protocol 2.Open Relay:开放式中继 就是人家的邮件从这个邮件服务器过,你都帮忙转发,这样就会成为产生垃圾邮件的根源.所以都要关闭Open Relay 3.SASL,Simple Authintication Secure Layer,简单

Unity学习笔记之五为Prefab添加材质

本次笔记中,我们将利用unity来创建并使用材质,把材质添加到我们的Prefab中去. 这一系列教程以及素材均参考自人人素材翻译组出品的翻译教程<Unity游戏引擎的基础入门视频教程>,下载链接附在第二篇学习笔记中. 继续上次笔记中所记录的东西,在Project视图中,ImportedAssets-Meshes-Materials下我们可以看到一个没有纹理的材质球,这个材质是跟随我们的3d Max模型来的默认材质.因为这里我们要添加自己的材质,所以我们直接把这个材质球删除. 删除后,我们看到本

【saltstack学习笔记之六】salt的分组

分组的类型    -G    Grains glob匹配    //比如:[email protected]:Ubuntu    -E    PCRE Minion id匹配    //比如:[email protected]\d+\.(dev|qa|prod)\.loc    -P    Grains PCRE匹配    //比如:[email protected]:(RedHat|Fedora|CentOS)    -L    minions列表    //比如:[email protect