Salt Orchestrate Targeting

时间:2015-12-04 05:43:43

标签: jinja2 salt-stack

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

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

在reactor.sls中 - 我想从代理获取一些数据并仅在某些盐爪上运行某个SLS(不在salt master本身上)。所以我使用跟随块和tgt来确保它只在那些minions上运行。根据文档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...

1 个答案:

答案 0 :(得分:0)

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

首先&#34;跑步者&#34;应该用于你需要在主人而不是远程小兵身上做的事情,如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 }}

这将仅在由tgt

过滤的服务器上运行update_server.sls文件