SaltEvent

在salt的架构里面有一个叫sal-event的东西,可以记录着masterminion通讯时的一些事件信息;

如何监听

监听有两种方式;一种是通过命令行,一种是通过代码监听 socket

代码方式

import salt.config
import salt.utils.event

opts = salt.config.client_config("/etc/salt/master")

event = salt.utils.event.get_event(
    "master", sock_dir=opts["sock_dir"], transport=opts["transport"], opts=opts
)

data = event.get_event()

命令方式

salt-run state.event pretty=True

这时会进入一个等待的状态,监听事件列表;重启一下 salt-minion,将输出如下信息;

minion/refresh/10.0.2.38        {"Minion data cache refresh": "10.0.2.38", "_stamp": "2020-10-26T09:02:24.924301"}
minion_start    {"pretag": null, "cmd": "_minion_event", "tag": "minion_start", "data": "Minion 10.0.2.38 started at Mon Oct 26 17:02:25 2020", "id": "10.0.2.38", "_stamp": "2020-10-26T09:02:25.446265"}
salt/minion/10.0.2.38/start     {"pretag": null, "cmd": "_minion_event", "tag": "salt/minion/10.0.2.38/start", "data": "Minion 10.0.2.38 started at Mon Oct 26 17:02:25 2020", "id": "10.0.2.38", "_stamp": "2020-10-26T09:02:25.454942"}

事件解释

type SaltEvent struct {
	Tag  string                 `json:"tag"`
	Data map[string]interface{} `json:"data"`
}
  • tag标志着事件的类型,常用的tag列表
  • Data里面存放着数据信息

应用

可以使用这个特性来做一些自主的触发提示;比如说有新的主机连接过来了、新的job返回了,用来做监听事件非常的不错。