盐编排目标

Salt Orchestrate Targeting

我正在使用 reactor 来捕获某些事件,我在 /etc/salt/master.d 中的 reactor.conf 看起来像:

reactor:
  - 'health/agent/update':
    - salt://health-checks/reactor.sls

在 reactor.sls - 我想从代理和 运行 某个 SLS 获取一些数据,只在某些 salt minions 上(不在 salt master 本身上)。因此,我将以下块与 tgt 一起使用,以确保它 运行 仅在那些小兵上。根据文档 at,这看起来不错。在 update_server.sls 中,我生成了一些托管文件。

{% set event_data = data.data %}
{% set target_server_name = data.data.server_name %}
'update server states':
  runner.state.orchestrate:
    - tgt: {{ target_server_name }}
    - mods: health-checks/update_server
    - pillar:
        event_data: {{ event_data }}

但是托管文件仅在 salt-master 上生成,而不在任何 tgt minions 上生成。我错过了什么? 运行 对目标小兵执行 sls 并在那里产生预期结果的正确方法是什么?

我也试过使用 salt.state 但结果出错,代码

 salt.state:
    - tgt: '*{{ target_server_name }}*'

和错误:

2015-12-04 06:37:24,467 [salt.utils.process][INFO    ][17924] Process <class 'salt.utils.reactor.Reactor'> (17989) died with exit status None, restarting...

我想我意识到我在做的错误。

首先,"runners" 应该用于您需要在 master 而不是 remote minions 上做的事情,正如 Runner 文档 at:

中明确说明的那样

Salt runners work similarly to Salt execution modules however they execute on the Salt master itself instead of remote Salt minions.

对我有用的是:

'update server states':
  local.state.sls:
    - tgt: '*{{ target_server_name }}*'
    - arg: 
      - 'health-checks/update_server'
    - kwarg:
        pillar:
          event_data: {{ event_data }}

这将 运行 update_server.sls 文件仅在 tgt

过滤的服务器上