salt的内部组件之间的通信是通过发送和监听事件实现的。在salt中,几乎所有的变动都会产生事件,如:
salt minion连接salt master
密钥被接受或拒绝
发送作业
从minion返回作业结果
在线心跳(默认情况下已关闭)
甚至是salt命令行接口使用事件系统都会产生事件。当一个命令发送到salt master后,salt CLI仅仅需要监视事件总线来获取从目标minion返回的作业结果。
监视事件
salt提供了一个runner来在salt master上实时显示事件。
- salt-run state.event pretty=True
如果你使用的是demo环境,你的事件总线可能是安静的,所以尝试打开另一个终端,发送一条salt ‘*’ test.ping命令或者重启salt-minion服务。
下面是几条在salt master上获取到的事件:
- salt/job/20150923203228234305/new {
- "_stamp": "2016-12-01T08:11:28.235712",
- "arg": [],
- "fun": "test.ping",
- "jid": "20161201081128234305",
- "minions": [
- "minion2"
- ],
- "tgt": "*",
- "tgt_type": "glob",
- "user": "sudo_vagrant"
- }
- salt/job/20161201081128234305/ret/minion2 {
- "_stamp": "2016-12-01T08:11:28.291789",
- "cmd": "_return",
- "fun": "test.ping",
- "fun_args": [],
- "id": "minion2",
- "jid": "20161201081128234305",
- "retcode": 0,
- "return": true,
- "success": true
- }
- salt/auth {
- "_stamp": "2016-12-01T08:11:02.998305",
- "act": "pend",
- "id": "minion1",
- "pub": "-----BEGIN PUBLIC KEY-----\...\n-----END PUBLIC KEY-----\n",
- "result": true
- }
事件格式
事件由两个主要部分组成:标识事件的tag和事件的详细信息。
事件标记
所有的salt事件的前缀是salt/,加上基于事件类型的额外级别(level)。例如,作业事件前缀为salt/job/。每个事件部分使用/分隔提供简单的命名空间。这个标识符称为事件标记(event tag),通常包含具体的详细信息,如作业ID或minion ID。
除了事件标记外,每个事件还包括特定的事件数据。
事件数据
每一个事件包括一个timestamp和该特定事件唯一的键和值。