TL; DRКак я могу запустить state.sls из реактора
Я хочу использовать реактор, чтобы назвать что-то похожее на простой salt '*' state.sls examplestate
Я новичок (МОГ) к реакторам с солью, и у меня проблемы с одной из функций.
В документах реакторных расположенных here, в разделе "Advanced System State, возможностей", есть следующий пример:
/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
В этом примере, при условии, что я следую его правильно, реактор event
оттеняет some_event.sls
находится в каталоге реактора. Затем some_event.sls
использует runner.state.orchestrate для запуска do_complex_thing.sls
.
То, что я пытаюсь сделать, очень похоже, но я не смог заставить его работать. Я бы хотел, чтобы реактор event
отправился some_event.sls
. В some_event.sls мне просто хотелось бы назвать состояние, которое я написал. Например, простое состояние, которое использует file.managed для перемещения файла от ведущего к миниатюре. Я попытался это ниже:
/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. Любая помощь приветствуется.
Я пробовал, что и это не сработало (не знаю почему), но у Whytewolf был ответ на IRC. Я отправлю ответ ниже. +1 для добавления local.state.sls. – trueCamelType
Вы можете попробовать удалить строку 'mods' из моего примера и добавить 2 строки раздела' arg', которые вы имеете в следующем примере. Я уверен, что вам не нужен '.init' –
Правильно, я удалил .init (он отлично работает с ним, но да, он не нужен), и он работает так же хорошо , Спасибо за помощь – trueCamelType