在Master上触发事件并等待Salt Minion上的"响应事件"

muf*_*fel 6 salt-stack

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

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

我知道我可以使用salt-callsalt.modules.event.fire_master模块向主人发送事件.

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

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

小智 1

我也被这个问题困扰,但我设法偶然发现了你需要什么。答案就在 salt 的恰当名称中:saltmod.wait_for_event

但如果您注意到该状态被识别为仅适用于 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
Run Code Online (Sandbox Code Playgroud)