saltstack十三Reactor

一晃,研究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长啥样的呢?大概就长下面这个样子。

EventfiredatThuJun2610:43:082014
*************************
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"helloliss">>/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-masterrestart
[ok]Restartingsaltmastercontroldaemon:salt-master.

在minion上手动产生一个event,

root@salt-master:~#salt'*'cmd.run"salt-callevent.fire_master'{"lixc":"lixc"}''lixc'"
salt-minion:
local:
True
root@salt-master:~#

看一下这个event的详细内容

EventfiredatThuJun2612:30:032014
*************************
Tag:lixc
Data:
{'_stamp':'2014-06-26T12:30:03.826420','cmd':'_minion_event','data':{'lixc':'lixc'},'id':'salt-minion','pretag':None,'tag':'lixc'}
EventfiredatThuJun2612:30:03201

看一下,lixc.sls执行了没?

root@salt-master:~#salt'*'cmd.run'cat/tmp/test.log'
salt-minion:
Helloliss

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-masterrestart
[ok]Restartingsaltmastercontroldaemon:salt-master.
root@salt-master:~#salt'*'cmd.run"salt-callevent.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了,哈哈!

相关文章

react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接...
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc ...