【问题标题】:How can I run state.sls from a reactor如何从反应堆运行 state.sls
【发布时间】:2016-07-20 06:44:24
【问题描述】:

TL;DR

我想使用reactor,调用类似简单的salt '*' state.sls examplestate


我是 saltstack 反应器的新手,但我在使用其中一项功能时遇到了问题。

在位于here 的reactor 文档中,在“Advanced State System Capabilities”下,有以下示例:

/etc/salt/master.d/reactor.conf

# A custom event containing: {"foo": "Foo!", "bar: "bar*", "baz": "Baz!"}
reactor:
  - myco/custom/event:
    - /srv/reactor/some_event.sls

/srv/reactor/some_event.sls

invoke_orchestrate_file:
  runner.state.orchestrate:
    - mods: orch.do_complex_thing
    - pillar:
        event_tag: {{ tag }}
        event_data: {{ data | json() }}

/srv/salt/orch/do_complex_thing.sls

{% set tag = salt.pillar.get('event_tag') %}
{% set data = salt.pillar.get('event_data') %}

# Pass data from the event to a custom runner function.
# The function expects a 'foo' argument.
do_first_thing:
  salt.runner:
    - name: custom_runner.custom_function
    - foo: {{ data.foo }}

# Wait for the runner to finish then send an execution to minions.
# Forward some data from the event down to the minion's state run.
do_second_thing:
  salt.state:
    - tgt: {{ data.bar }}
    - sls:
      - do_thing_on_minion
    - pillar:
        baz: {{ data.baz }}
    - require:
      - salt: do_first_thing

在这个例子中,假设我正确地跟随它,reactor event 触发了位于 reactor 目录中的 some_event.slssome_event.sls 然后使用 runner.state.orchestrate 运行 do_complex_thing.sls

我正在尝试做的事情非常相似,但我无法让它发挥作用。我想让反应堆event 启动some_event.sls。在 some_event.sls 中,我只是希望它调用我编写的状态。例如,使用 file.managed 将文件从 master 移动到 minion 的简单状态。我在下面尝试过:

/etc/salt/master.d/reactor.conf

reactor:
  - 'salt/netapi/hook/test':
    - /srv/reactor/testdirectory/configure.sls

/srv/reactor/testdirectory/configure.sls

{% set postdata = data.get('post', {}) %}
{% if grains['os_family']=="Debian" %}
testifthisworks:
  salt.state:
    - mods: transferfile.init
    - tgt: {{ postdata.tgt }}
{% endif %}

/srv/salt/transferfile/init.sls

/root/testfile.txt:
  file.managed:
    - source: salt://testfiles/testfile.txt
    - makedirs: True
    - mode: 700
    - template: jinja

在 configure.sls 文件中,我正在尝试使用 salt.state 来启动 state.sls,这不适用于错误 "ReactWrap" object has no attribute salt

当我尝试做同样的事情,但使用原始示例中的 runner.state.orchestrate(我不需要编排)时,它可以工作,但它将文件移动到我的主服务器上的 /root/。

我不确定除了 salt.state 之外我还能使用什么来运行 state.sls。任何帮助表示赞赏。

【问题讨论】:

    标签: ubuntu-14.04 webhooks salt-stack


    【解决方案1】:

    我想你想要这个:

    /srv/reactor/testdirectory/configure.sls

    {% set postdata = data.get('post', {}) %}
    {% if grains['os_family']=="Debian" %}
    testifthisworks:
      local.state.sls:
        - tgt: {{ postdata.tgt }}
        - arg:
          - transferfile
    {% endif %}
    

    【讨论】:

    • 我试过了,但没有成功(不知道为什么),但Whytewolf 确实在 IRC 上有了答案。我将在下面发布答案。 +1 用于添加 local.state.sls。
    • 您可以尝试从我的示例中删除mods 行,并添加以下示例中arg 部分的两行。我很确定你不需要.init
    • 没错,我删除了 .init(它可以正常工作,但是不需要它),它也可以这样工作。感谢您的帮助
    • 我会将更改添加到我的示例中。谢谢!
    【解决方案2】:

    我得到这个工作的方式是将/srv/reactor/testdirectory/configure.sls更改为以下内容:

    {% set postdata = data.get('post', {}) %}
    {% if grains['os_family']=="Debian" %}
    testifthisworks:
      local.state.apply:
        - tgt: {{ postdata.tgt }}
        - arg:
          - transferfile
    

    现在一切正常。

    【讨论】:

      猜你喜欢
      • 2014-07-09
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 2021-10-29
      • 2022-06-15
      相关资源
      最近更新 更多