saltstack/salt

Problem of the fun dictionary value being overwritten

Open

#56 297 ouverte le 3 mars 2020

Voir sur GitHub
 (8 commentaires) (0 réactions) (0 assignés)Python (5 508 forks)batch import
Reactorbuggood first issueseverity-high

Métriques du dépôt

Stars
 (13 710 stars)
Métriques de merge PR
 (Merge moyen 72j 6h) (221 PRs mergées en 30 j)

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

  1. Configure schedule_queue.sls on reactors folder
  2. Configure the reactor.conf
  3. 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    

Guide contributeur