【问题标题】:Trigger event on Master and wait for "response event" on Salt Minion在 Master 上触发事件并在 Salt Minion 上等待“响应事件”
【发布时间】:2019-08-10 05:03:26
【问题描述】:

我想要的是由 Minion 调用的类似 RPC 的行为放入某种脚本中,然后可以由任何(非 Salt、非 Python)应用程序和服务调用:

  • 在 Master 上触发事件(负载对应于命令行参数)
  • Reactor 系统接管、处理事件并(取决于事件的发送者和有效负载)发送响应事件。
    • 响应事件可能包含敏感负载,并且可能不会被任何其他 minion 看到(或至少解密)
  • Minion 收到响应事件

我知道我可以使用 salt-callsalt.modules.event.fire_master 模块将事件发送到主服务器。

那么我该如何等待响应事件呢?

我如何确保其他 Minions 在事件总线上看不到响应事件(afaik 所有从 Master 发送的事件都是公开的,并且过滤发生在 Minion 端)?我想到了gpg 渲染器,但这可能太复杂了——需要有一种方法,因为 Master 需要将敏感的 Pillar 数据发送给具有类似要求的 Minions。

【问题讨论】:

  • reactor 可以捕获事件并做任何你想做的事情,例如应用状态、运行模块等。

标签: salt-stack


【解决方案1】:

我也陷入了这个问题,但我设法偶然发现了你需要的东西。答案就在 salt 的恰当名称中:saltmod.wait_for_event

但是,如果您注意到状态被标识为 intended 仅适用于 salt-master。这实际上意味着它可以在 minion 上使用,但是您必须将 node='master' kwarg 更改为 node='minion'。这是一个示例状态文件,它发送一个事件(它触发一个反应器来触发一个跑步者),然后等待 60 秒,让 salt-master 将事件发送回 Minion(跑步者在成功运行时发回):

salt/custom/trigger_runner:
  event.send

wait_for_event_runner_return:
  salt.wait_for_event:
    - name: salt/custom/runner_complete
    - timeout: 60
    - id_list:
      - {{ grains.id }}
    - node: minion

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多