saltstack/salt
View on GitHubProblem of the fun dictionary value being overwritten
Open
#56,297 opened on Mar 3, 2020
Reactorbuggood first issueseverity-high
Description
Description of Issue
Problem of automatic overwritting the set value to the dictionary, when using reactor to post an event on a queue.
Setup
(Please provide relevant configs and/or SLS files (Be sure to remove sensitive info).) reactor.conf
reactor:
- 'salt/beacon/*/iptables/exceeded':
- salt://reactors/schedule_queue.sls
schedule_queue.sls
{%- set split_tag = tag.split('/') -%}
{%- set orch_fun = split_tag[-2::1]|join('.') -%}
{%- set queue = split_tag[-2::1]|join('_') -%}
invoke_queue_scheduler:
runner.queue.insert_runner:
- fun: state.orchestrate
- kwargs:
mods: orch.{{ orch_fun }}
pillar:
id: {{ data['id'] }}
- queue: {{ queue }}
- backend: pgjsonb
Steps to Reproduce Issue
- Configure schedule_queue.sls on reactors folder
- Configure the reactor.conf
- Trigger the reactor from a minion with the following code:
salt-call event.send tag='salt/beacon/*/iptables/exceeded'
(Include debug logs if possible and relevant.) The salt renders and uses the correct information
[PROFILE ] Time (in seconds) to render '/var/cache/salt/master/files/base/reactors/schedule_queue.sls' using 'jinja' renderer: 0.06471872329711914
[DEBUG ] Rendered data from file: /var/cache/salt/master/files/base/reactors/schedule_queue.sls:
invoke_queue_scheduler:
runner.queue.insert_runner:
- fun: state.orchestrate
- kwargs:
mods: orch.iptables.exceeded
pillar:
id: mesos2.host.intranet
- queue: iptables_exceeded
- backend: pgjsonb
[DEBUG ] Results of YAML rendering:
OrderedDict([('invoke_queue_scheduler', OrderedDict([('runner.queue.insert_runner', [OrderedDict([('fun', 'state.orchestrate')]), OrderedDict([('kwargs', OrderedDict([('mods', 'orch.iptables.exceeded'), (
'pillar', OrderedDict([('id', 'mesos2.host.intranet')]))]))]), OrderedDict([('queue', 'iptables_exceeded')]), OrderedDict([('backend', 'pgjsonb')])])]))])
[PROFILE ] Time (in seconds) to render '/var/cache/salt/master/files/base/reactors/schedule_queue.sls' using 'yaml' renderer: 0.0008614063262939453
But when sending the data he sets runner.queue.insert_runner instead of iptables_exceeded
[DEBUG ] Sending event: tag = salt/run/20200303165210089774/new; data = {'fun': 'runner.queue.insert_runner', 'jid': '20200303165210089774', 'user': 'Reactor', 'fun_args': ['queue.insert_runner', {'back
end': 'pgjsonb', 'queue': 'iptables_exceeded', 'kwargs': OrderedDict([('mods', 'orch.iptables.exceeded'), ('pillar', OrderedDict([('id', 'mesos2.host.intranet')]))]), 'args': None}], '_stamp': '2020-03-03
T16:52:10.092216'}
[DEBUG ] LazyLoaded pgjsonb.insert
[DEBUG ] SQL Query: select relname from pg_class where relkind='r' and relname !~ '^(pg_|sql_)';
[DEBUG ] Queue iptables_exceeded already exists.
[DEBUG ] SQL Query: INSERT INTO iptables_exceeded(data) VALUES('{"fun": "queue.insert_runner", "args": [], "kwargs": {"mods": "orch.iptables.exceeded", "pillar": {"id": "mesos2.host.intranet"}}}')
[DEBUG ] LazyLoaded local_cache.prep_jid
[DEBUG ] Sending event: tag = salt/run/20200303165210089774/ret; data = {'fun': 'runner.queue.insert_runner', 'jid': '20200303165210089774', 'user': 'Reactor', 'fun_args': ['queue.insert_runner', {'back
end': 'pgjsonb', 'queue': 'iptables_exceeded', 'kwargs': OrderedDict([('mods', 'orch.iptables.exceeded'), ('pillar', OrderedDict([('id', 'mesos2.host.intranet')]))]), 'args': None}], '_stamp': '2020-03-0$
T16:52:10.129837', 'return': True, 'success': True}
[DEBUG ] LazyLoaded nested.output
True
Return when listing items:
[root@salt-master /]# salt-run queue.list_items iptables_exceeded backend=pgjsonb
|_
----------
args:
fun:
queue.insert_runner
kwargs:
----------
mods:
orch.iptables.exceeded
pillar:
----------
id:
mesos2.host.intranet
Versions Report
(Provided by running salt --versions-report. Please also mention any differences in master/minion versions.)
[root@salt-master /]# salt --version │[DEBUG ] SaltReqTimeoutError, retrying. (1/3) │1 bash
salt 3000