设为首页 收藏本站
查看: 1270|回复: 0

[经验分享] saltstack(十三)Reactor

[复制链接]

尚未签到

发表于 2018-8-1 10:37:17 | 显示全部楼层 |阅读模式
  一晃,研究saltstack有一个多礼拜了。坑爹的公司,试用期要6个月,最坑爹的是这6个月啥权限都没有,对于一个运维来说,没权限不等于无米之炊啊。楼主闲着无聊,也只有捣腾捣腾理论,自己搞搞小测试了。
  牢骚发完了,继续研究Reactor
  说起Reactor,就要从salt的events说起了。那个events是个什么呢?
  说起events就要从salt的通信机制说起了,salt采用zeromq通信的,这个zeromq通信有一种模式,叫
  Pub/Sub模式,
  显而易见pub就是publish,意思就是发布
  sub就是subscription,意思就是订阅的意思。
  OK,看到这里,大概就知道了,就是一个发一个收嘛。
  大概知道这么多就OK了,楼主刚毕业的时候干过大半年的售后维护,接着干了半年运维,没干过开发,太深的东西就不搞了。
  OK,events系统就是,一个本地的ZeroMQ的PUB接口,这样events系统就可以产生event了,那么event长啥样的呢?大概就长下面这个样子。
Event fired at Thu Jun 26 10:43:08 2014  
*************************
  
Tag: salt/job/20140626104308591305/new
  
Data:
  
{'_stamp': '2014-06-26T10:43:08.591696',
  
'arg': ['/bin/ls /home'],
  
'fun': 'cmd.run',
  
'jid': '20140626104308591305',
  
'minions': ['salt-minion'],
  
'tgt': '*',
  
'tgt_type': 'glob',
  
'user': 'root'}}
  每个event都有一个tag,就是标签,有了这个标签,别人就可以认识你了。知道你是干什么的。
  当然我们也可以根据标签,来过滤或者说选取我们需要的event。。。。然后tag后面,跟着的就是具体的数据了,这些数据是一个字典结构,这个字典的名字叫Data,内容就是后面的那些个内容了。
  OK,以上差不多就是events系统的一个简要描述了。
  那啥是Reactor呢?
  其实Reactor就是匹配event的tag,如果发现有和我定义相匹配的tag,那么我就可以触发相应的操作。
  这玩意和咱们数据库里面的触发器,原理上面有点类似。。
  OK,Reactor系统的原理,现在咱们知道了。。。下面来看看怎么去实现吧
  首先,修改master的配置。
root@salt-master:~# cat >>/etc/salt/master.d/reactor.conf <<EOF  
> reactor:
  
>   - 'lixc':
  
>     - /srv/reactor/lixc.sls
  
> EOF
  
root@salt-master:~#
  好,reactor这个是我们reactor配置的起始标志,'lixc'是我们要匹配的tag,/srv/reactor/lixc.sls就是如果有匹配的标签的话,触发的操作。   这个文件的编写规则和state差不多。
  看一下/srv/reactor/lixc.sls
root@salt-master:~# cat >>/srv/reactor/lixc.sls <<EOF  
> clean_tmp:
  
>   cmd.cmd.run:
  
>     - tgt: 'os:Debian'
  
>     - expr_form: grain
  
>     - arg:
  
>       - echo "hello liss" >>/tmp/test.log
  
> EOF
  这个sls文件是个啥意思呢。第1行,随便起个名字,第2行cmd.cmd.run是啥意思呢?
  意思是使用salt的command的API,执行cmd模块的run函数。啥叫command API呢? 就是说我们在命令行执行的那些个东西,用这个API都可以在这个sls里面用。
  这个lixc.sls如果换成在命令行上执行。这么弄也可以。
  salt -G 'os:Debian' cmd.run 'echo "hello liss >>/tmp/test.log"'
  OK,3,4两行就是作用的目标和匹配方式了,5,6两行就是cmd.run这个函数要传进来的参数了。
  OK,咱们来测试一下。
  我们修改了master的配置文件,首先要重启一下啊master
root@salt-master:~# /etc/init.d/salt-master restart  
[ ok ] Restarting salt master control daemon: salt-master.
  在minion上手动产生一个event,
root@salt-master:~# salt '*' cmd.run "salt-call event.fire_master '{"lixc": "lixc"}' 'lixc'"  
salt-minion:
  
    local:
  
        True
  
root@salt-master:~#
  看一下这个event的详细内容
Event fired at Thu Jun 26 12:30:03 2014  
*************************
  
Tag: lixc
  
Data:
  
{'_stamp': '2014-06-26T12:30:03.826420',
  
'cmd': '_minion_event',
  
'data': {'lixc': 'lixc'},
  
'id': 'salt-minion',
  
'pretag': None,
  
'tag': 'lixc'}
  
Event fired at Thu Jun 26 12:30:03 201
  看一下,lixc.sls执行了没?
root@salt-master:~# salt '*' cmd.run 'cat /tmp/test.log'  
salt-minion:
  
    Hello liss
  OK,Reactor除了可以使用command API也可以使用runner
  好,咱们看看。修改/etc/salt/master.d/reactor.conf
root@salt-master:~# cat /etc/salt/master.d/reactor.conf  
reactor:
  
  - 'lixc':
  
    - /srv/reactor/lixc.sls
  
    - /srv/reactor/liss.sls
  
root@salt-master:~#
  看一下/srv/reactor/liss.sls。注意- env: /home是传递给lsdir.lsdir这个函数的参数。lsdir就是楼主上一篇写的一个runner
root@salt-master:~# cat /srv/reactor/liss.sls  
test_runner:
  
  runner.lsdir.lsdir:
  
    - env: /home
  
root@salt-master:~#
  重启下master,并手动触发一个event
root@salt-master:~# /etc/init.d/salt-master restart  
[ ok ] Restarting salt master control daemon: salt-master.
  
root@salt-master:~# salt '*' cmd.run "salt-call event.fire_master '{"lixc": "lixc"}' 'lixc'"
  
salt-minion:
  
    local:
  
        True
  看一下,runner执行的结果。
root@salt-master:~# cat /tmp/test.log  
salt-minion
  
  lixc
  
  lost+found
  
  salt-develop
  
  salt-develop.zip
  OK,这些是最简单的基本功能了。
  saltstack先搞了这里了,经过这一个多礼拜的学习,常用功能基本学习了。因为功能太多了,也没有实际需求和实战,不打算继往下深入看了。还有一个salt API有空总结一下。。
  接下来开始转战ansible了,哈哈!

运维网声明 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-544630-1-1.html 上篇帖子: saltstack(十二)job管理 下篇帖子: 了解saltstack的通信协议zeromq(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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