SaltStack事件驱动(1) – 监视事件

salt的内部组件之间的通信是通过发送和监听事件实现的。在salt中,几乎所有的变动都会产生事件,如:

  • salt minion连接salt master
  • 密钥被接受或拒绝
  • 发送作业
  • 从minion返回作业结果
  • 在线心跳(默认情况下已关闭)
  • 甚至是salt命令行接口使用事件系统都会产生事件。当一个命令发送到salt master后,salt CLI仅仅需要监视事件总线来获取从目标minion返回的作业结果。

    监视事件

    salt提供了一个runner来在salt master上实时显示事件。

    1. salt-run state.event pretty=True

    如果你使用的是demo环境,你的事件总线可能是安静的,所以尝试打开另一个终端,发送一条salt ‘*’ test.ping命令或者重启salt-minion服务。
    下面是几条在salt master上获取到的事件:

    1. salt/job/20150923203228234305/new   {
    2.     "_stamp": "2016-12-01T08:11:28.235712",
    3.     "arg": [],
    4.     "fun": "test.ping",
    5.     "jid": "20161201081128234305",
    6.     "minions": [
    7.         "minion2"
    8.     ],
    9.     "tgt": "*",
    10.     "tgt_type": "glob",
    11.     "user": "sudo_vagrant"
    12. }
    1. salt/job/20161201081128234305/ret/minion2   {
    2.     "_stamp": "2016-12-01T08:11:28.291789",
    3.     "cmd": "_return",
    4.     "fun": "test.ping",
    5.     "fun_args": [],
    6.     "id": "minion2",
    7.     "jid": "20161201081128234305",
    8.     "retcode": 0,
    9.     "return": true,
    10.     "success": true
    11. }
    1. salt/auth   {
    2.     "_stamp": "2016-12-01T08:11:02.998305",
    3.     "act": "pend",
    4.     "id": "minion1",
    5.     "pub": "-----BEGIN PUBLIC KEY-----\...\n-----END PUBLIC KEY-----\n",
    6.     "result": true
    7. }

    事件格式

    事件由两个主要部分组成:标识事件的tag和事件的详细信息。

    事件标记

    所有的salt事件的前缀是salt/,加上基于事件类型的额外级别(level)。例如,作业事件前缀为salt/job/。每个事件部分使用/分隔提供简单的命名空间。这个标识符称为事件标记(event tag),通常包含具体的详细信息,如作业ID或minion ID。
    除了事件标记外,每个事件还包括特定的事件数据。

    事件数据

    每一个事件包括一个timestamp和该特定事件唯一的键和值。

    标签:SaltStack 发布于:2019-11-20 11:50:39