Event是saltstack里面的对每个事件的一个记录,它相比job更加底层,event能记录更加详细的saltstack事件,比如minion服务启动后请求master签发证书或者证书校验的过程,都能通过event事件来查看整个过程
event也为扩展saltstack提供了更加友好的接口
官方列出一些event事件,包括认证,minion连接master,key认证,job等
查看event事件
可以通过以下命令查看event事件,然后再打开一个终端执行任务
salt-run state.event pretty=True
另一个终端执行salt ‘minion1‘ test.ping
salt/event/new_client {
"_stamp": "2016-04-20T02:37:17.643259"
}
20160420103717664109 {
"_stamp": "2016-04-20T02:37:17.665541",
"minions": [
"minion1"
]
}
salt/job/20160420103717664109/new {
"_stamp": "2016-04-20T02:37:17.666289",
"arg": [],
"fun": "test.ping",
"jid": "20160420103717664109",
"minions": [
"minion1"
],
"tgt": "minion1",
"tgt_type": "glob",
"user": "root"
}
salt/job/20160420103717664109/ret/minion1 {
"_stamp": "2016-04-20T02:37:17.836600",
"cmd": "_return",
"fun": "test.ping",
"fun_args": [],
"id": "minion1",
"jid": "20160420103717664109",
"retcode": 0,
"return": true,
"success": true
}
这个时候可以看到每个event事件的详细信息,包括job key校验等信息
--------------------------------------------------------------------------
在master上配置Reactor
在前面已经简单测试了event,接下来说说reactor系统,reactor是基于event的每个事件来做相应的操作(state)
可以理解reactor系统是一直监听着event,然后触发一些states操作
下面通过一个例子来讲解下reactor系统的适用场景
日常大规模新机器上线或者初始化机器的时候,都希望minion第一次服务起来的时候就能完成所有的配置,这个时候需要自动完成minion的证书签发和根据不同业务完成不同states配置
恰好reactor就是干这个事情的
在master配置文件里面添加如下内容
reactor:
- ‘salt/auth‘: #监听证书认证event
- /srv/reactor/Minion.sls #执行states sls文件
- ‘salt/minion/Minion/start‘: #监听Minion start event
- /srv/reactor/auto.sls #执行states sls文件
关于event的定义,可以通过上一章节对event的了解根据需要监听的event来进行相应的配置,当然reactor里面对event的监听还支持正则表达式的方式,下面来看看这两个sates.sls文件
cat /srv/reactor/Minion.sls
{% if ‘act‘ in data and data[‘act‘] == ‘pend‘ and data[‘id‘].startswith(‘Min‘)%}
key_accept:
wheel.key.accept:
- match: {{data[‘id‘]}}
{% endif %}
这个文件主要是取event里面的数据,然后根据minion的ID进行证书签发,我们在state.sls文件里面引入了Jinja相关的语法,下面我们来看看进行初始的auto.sls
run_state:
local.state.sls:
- tgt: {{data[‘id‘]}}
- arg:
- test
run_init:
local.cmd.run:
- tgt: {{data[‘id‘]}}
- arg:
- echo initsok >> /tmp/cpis
这个文件运行了两个module,一个是state.sls进行,一个是cmd.run
第一个run_state的意思跟手动针对minion运行state.sls test一样,第二个run_init表示针对minion运行cmd.run ‘echo initok‘ >> /tmp/cpis一样,下面我们来看下test这个sls文件,我这里只是一个简单的文件管理例子
cat /srv/salt/test.sls
/tmp/example:
file.managed:
- source: salt://example
到这里,master端的reactor配置就算配置好了,下面我们需要重启master服务,这个时候可以新建一台minion.minion的ID,只要是以min字母开头即可,当minion服务启动后,minion会进行自动的初始配置