saltstack event配合websocket客户端实时推送结果 推荐
2014-05-28 10:37
477 查看
前沿:
以前都是调取一个url的接口,把结果post过去,然后接收post请求的那个函数,会把结果send到指定的websocket客户端,也可以是所有的websocket客户端。
但总是觉得频繁的调用url,然后再send,觉得有些多此一举,还不如用python websocket client直接链接ws长链接,然后直接send就可以了。
saltstack的event是什么?
我也不长篇大论了,他是saltstack提供的一个事件机制,咱们通过saltstack做的一些实例操作,在event可以体现出现出来。比如,调用调用test.ping 、 cmd.run 。
最明显的log是,创建任务,然后找jid的结果,没有的话,再查。
在这里也可以看到他获取结果的思路:
创建一个任务及jid,然后每次去看看刚才(sleep 30;ip a ) 的结果,每隔五秒轮寻一次结果。每次去saltutil.find_job的jid是相同的,不同的是saltutil.find_job他本身的任务号。
原文: http://rfyiamcool.blog.51cto.com/1030776/1418208
对于websocket把结果打到前端,咱们就直接用websocket客户端搞~
websocket模块的地址在,https://github.com/liris/websocket-client.git
pip install https://github.com/liris/websocket-client.git
cd webso*
python setup.py install
原文: http://rfyiamcool.blog.51cto.com/1030776/1418208
event和websocket结合就可以了,event的结果有些乱,可以预先把任务的jid放到list里面,然后每次去遍历数据,send到前端。
这篇文章,写的有些泛泛,大家图个新鲜就好 ~
以前都是调取一个url的接口,把结果post过去,然后接收post请求的那个函数,会把结果send到指定的websocket客户端,也可以是所有的websocket客户端。
但总是觉得频繁的调用url,然后再send,觉得有些多此一举,还不如用python websocket client直接链接ws长链接,然后直接send就可以了。
saltstack的event是什么?
我也不长篇大论了,他是saltstack提供的一个事件机制,咱们通过saltstack做的一些实例操作,在event可以体现出现出来。比如,调用调用test.ping 、 cmd.run 。
最明显的log是,创建任务,然后找jid的结果,没有的话,再查。
[root@devops-ruifengyun bj_lvs2 ]$ python event.py {'tag': '20140528090741247990', 'data': {'_stamp': '2014-05-28_09:07:41.248175', 'minions': ['10.150.145.51']}} ------ {'tag': 'new_job', 'data': {'tgt_type': 'glob', 'jid': '20140528090741247990', 'tgt': '10.150.145.51', '_stamp': '2014-05-28_09:07:41.248224', 'user': 'root', 'arg': ['ip a'], 'fun': 'cmd.run', 'minions': ['10.150.145.51']}} ------ {'tag': 'salt/job/20140528090741247990/new', 'data': {'tgt_type': 'glob', 'jid': '20140528090741247990', 'tgt': '10.150.145.51', '_stamp': '2014-05-28_09:07:41.248250', 'user': 'root', 'arg': ['ip a'], 'fun': 'cmd.run', 'minions': ['10.150.145.51']}} ------ {'tag': '20140528090741247990', 'data': {'fun_args': ['ip a'], 'jid': '20140528090741247990', 'return': '1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN \n link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n inet 127.0.0.1/8 scope host lo\n inet6 ::1/128 scope host \n valid_lft forever preferred_lft forever\n2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000\n link/ether 00:0c:29:fe:a4:a1 brd ff:ff:ff:ff:ff:ff\n inet 10.150.145.51/16 brd 10.150.255.255 scope global eth0\n inet 10.150.145.55/32 scope global eth0\n inet 10.150.145.100/32 scope global eth0\n inet6 fe80::20c:29ff:fefe:a4a1/64 scope link \n valid_lft forever preferred_lft forever', 'retcode': 0, 'success': True, 'cmd': '_return', '_stamp': '2014-05-28_09:07:41.393589', 'fun': 'cmd.run', 'id': '10.150.145.51'}} ------ {'tag': 'salt/job/20140528090741247990/ret/10.150.145.51', 'data': {'fun_args': ['ip a'], 'jid': '20140528090741247990', 'return': '1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN \n link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n inet 127.0.0.1/8 scope host lo\n inet6 ::1/128 scope host \n valid_lft forever preferred_lft forever\n2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000\n link/ether 00:0c:29:fe:a4:a1 brd ff:ff:ff:ff:ff:ff\n inet 10.150.145.51/16 brd 10.150.255.255 scope global eth0\n inet 10.150.145.55/32 scope global eth0\n inet 10.150.145.100/32 scope global eth0\n inet6 fe80::20c:29ff:fefe:a4a1/64 scope link \n valid_lft forever preferred_lft forever', 'retcode': 0, 'success': True, 'cmd': '_return', '_stamp': '2014-05-28_09:07:41.393740', 'fun': 'cmd.run', 'id': '10.150.145.51'}} ------ {'tag': '20140528090742530725', 'data': {'_stamp': '2014-05-28_09:07:42.530881', 'minions': ['10.150.145.51']}} ------ {'tag': 'new_job', 'data': {'tgt_type': 'glob', 'jid': '20140528090742530725', 'tgt': '10.150.145.51', '_stamp': '2014-05-28_09:07:42.530922', 'user': 'root', 'arg': ['ip a'], 'fun': 'cmd.run', 'minions': ['10.150.145.51']}} ------ {'tag': 'salt/job/20140528090742530725/new', 'data': {'tgt_type': 'glob', 'jid': '20140528090742530725', 'tgt': '10.150.145.51', '_stamp': '2014-05-28_09:07:42.530946', 'user': 'root', 'arg': ['ip a'], 'fun': 'cmd.run', 'minions': ['10.150.145.51']}} ------ {'tag': '20140528090742530725', 'data': {'fun_args': ['ip a'], 'jid': '20140528090742530725', 'return': '1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN \n link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n inet 127.0.0.1/8 scope host lo\n inet6 ::1/128 scope host \n valid_lft forever preferred_lft forever\n2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000\n link/ether 00:0c:29:fe:a4:a1 brd ff:ff:ff:ff:ff:ff\n inet 10.150.145.51/16 brd 10.150.255.255 scope global eth0\n inet 10.150.145.55/32 scope global eth0\n inet 10.150.145.100/32 scope global eth0\n inet6 fe80::20c:29ff:fefe:a4a1/64 scope link \n valid_lft forever preferred_lft forever', 'retcode': 0, 'success': True, 'cmd': '_return', '_stamp': '2014-05-28_09:07:42.655764', 'fun': 'cmd.run', 'id': '10.150.145.51'}} ------ {'tag': 'salt/job/20140528090742530725/ret/10.150.145.51', 'data': {'fun_args': ['ip a'], 'jid': '20140528090742530725', 'return': '1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN \n link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n inet 127.0.0.1/8 scope host lo\n inet6 ::1/128 scope host \n valid_lft forever preferred_lft forever\n2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000\n link/ether 00:0c:29:fe:a4:a1 brd ff:ff:ff:ff:ff:ff\n inet 10.150.145.51/16 brd 10.150.255.255 scope global eth0\n inet 10.150.145.55/32 scope global eth0\n inet 10.150.145.100/32 scope global eth0\n inet6 fe80::20c:29ff:fefe:a4a1/64 scope link \n valid_lft forever preferred_lft forever', 'retcode': 0, 'success': True, 'cmd': '_return', '_stamp': '2014-05-28_09:07:42.655909', 'fun': 'cmd.run', 'id': '10.150.145.51'}} ------ {'tag': '20140528090829833342', 'data': {'_stamp': '2014-05-28_09:08:29.833516', 'minions': ['10.150.145.51']}} ------ {'tag': 'new_job', 'data': {'tgt_type': 'glob', 'jid': '20140528090829833342', 'tgt': '10.150.145.51', '_stamp': '2014-05-28_09:08:29.833566', 'user': 'root', 'arg': ['sleep 3;ip a'], 'fun': 'cmd.run', 'minions': ['10.150.145.51']}} ------
在这里也可以看到他获取结果的思路:
创建一个任务及jid,然后每次去看看刚才(sleep 30;ip a ) 的结果,每隔五秒轮寻一次结果。每次去saltutil.find_job的jid是相同的,不同的是saltutil.find_job他本身的任务号。
原文: http://rfyiamcool.blog.51cto.com/1030776/1418208
------ {'tag': 'new_job', 'data': {'tgt_type': 'glob', 'jid': '20140528092216402264', 'tgt': '10.150.145.51', '_stamp': '2014-05-28_09:22:16.402889', 'user': 'root', 'arg': ['20140528092151158538', {'__kwarg__': True}], 'fun': 'saltutil.find_job', 'minions': ['10.150.145.51']}} ------ {'tag': 'salt/job/20140528092216402264/new', 'data': {'tgt_type': 'glob', 'jid': '20140528092216402264', 'tgt': '10.150.145.51', '_stamp': '2014-05-28_09:22:16.402975', 'user': 'root', 'arg': ['20140528092151158538', {'__kwarg__': True}], 'fun': 'saltutil.find_job', 'minions': ['10.150.145.51']}} ------ {'tag': '20140528092216402264', 'data': {'fun_args': ['20140528092151158538', {'__kwarg__': True}], 'jid': '20140528092216402264', 'return': {'tgt_type': 'glob', 'jid': '20140528092151158538', 'tgt': '10.150.145.51', 'pid': 30325, 'ret': '', 'user': 'root', 'arg': ['sleep 30;ip a'], 'fun': 'cmd.run'}, 'retcode': 0, 'success': True, 'cmd': '_return', '_stamp': '2014-05-28_09:22:16.470647', 'fun': 'saltutil.find_job', 'id': '10.150.145.51'}} ------ {'tag': 'salt/job/20140528092216402264/ret/10.150.145.51', 'data': {'fun_args': ['20140528092151158538', {'__kwarg__': True}], 'jid': '20140528092216402264', 'return': {'tgt_type': 'glob', 'jid': '20140528092151158538', 'tgt': '10.150.145.51', 'pid': 30325, 'ret': '', 'user': 'root', 'arg': ['sleep 30;ip a'], 'fun': 'cmd.run'}, 'retcode': 0, 'success': True, 'cmd': '_return', '_stamp': '2014-05-28_09:22:16.470789', 'fun': 'saltutil.find_job', 'id': '10.150.145.51'}} ------ {'tag': '20140528092151158538', 'data': {'fun_args': ['sleep 30;ip a'], 'jid': '20140528092151158538', 'return': '1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN \n link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n inet 127.0.0.1/8 scope host lo\n inet6 ::1/128 scope host \n valid_lft forever preferred_lft forever\n2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000\n link/ether 00:0c:29:fe:a4:a1 brd ff:ff:ff:ff:ff:ff\n inet 10.150.145.51/16 brd 10.150.255.255 scope global eth0\n inet 10.150.145.55/32 scope global eth0\n inet 10.150.145.100/32 scope global eth0\n inet6 fe80::20c:29ff:fefe:a4a1/64 scope link \n valid_lft forever preferred_lft forever', 'retcode': 0, 'success': True, 'cmd': '_return', '_stamp': '2014-05-28_09:22:21.281017', 'fun': 'cmd.run', 'id': '10.150.145.51'}}
对于websocket把结果打到前端,咱们就直接用websocket客户端搞~
websocket模块的地址在,https://github.com/liris/websocket-client.git
pip install https://github.com/liris/websocket-client.git
cd webso*
python setup.py install
from websocket import create_connection ws = create_connection("ws://localhost:8888/ws") print "Sending 'Hello, World'..." ws.send("Hello, World") print "Sent" print "Reeiving..." result = ws.recv() print "Received '%s'" % result ws.close()
原文: http://rfyiamcool.blog.51cto.com/1030776/1418208
event和websocket结合就可以了,event的结果有些乱,可以预先把任务的jid放到list里面,然后每次去遍历数据,send到前端。
这篇文章,写的有些泛泛,大家图个新鲜就好 ~
相关文章推荐
- saltstack的探索-给zabbix客户端推送一个自定义的配置文件
- 服务器实时通知客户端方案,服务器发送/推送事件方案(2)server event,典型例子,可以用作股票、新闻信息推送
- 服务器实时通知客户端方案,服务器发送/推送事件方案(1)websocket
- Saltstack--迭代同步文件夹里面的文件到客户端(实例)
- 运维平台化saltstack和jinja2模板构建高可用集群配置平台 推荐
- 源码推荐(10.20):GitHub iPhone 客户端--MrCode,实时跟踪分析iOS App视图的小工具
- 源码推荐(10.20):GitHub iPhone 客户端--MrCode,实时跟踪分析iOS App视图的小工具
- rsync由svn所在的客户端向web服务器实时推送脚本及其文件的方法
- Websocket(3)--实时推送
- SaltStack Event系统监听events测试
- 自动化运维工具Saltstack详细介绍 推荐
- 使用swoole进行消息推送通知,配合vb.net进行客户端开发一样爽[开发篇]
- 关于Saltstack halite 配置管理及二次开发ui [原salt-ui] 推荐
- SaltStack之target 推荐
- 基于ssh的集群运维工具ansible api的使用[类saltstack] 推荐
- 自动化运维神器之saltstack (二)文件服务器 推荐
- 通过python和websocket构建实时通信系统[扩展saltstack监控] 推荐
- 集群管理系统 Saltstack的资源配置及性能测试 推荐
- 推送通知iOS客户端编写实现及推送服务器端编写 推荐
- 初识salt之saltstack配置应用以及基础用法 推荐