saltstack/salt

Problem of the fun dictionary value being overwritten

Open

#56.297 aberto em 3 de mar. de 2020

Ver no GitHub
 (8 comments) (0 reactions) (0 assignees)Python (5.508 forks)batch import
Reactorbuggood first issueseverity-high

Métricas do repositório

Stars
 (13.710 stars)
Métricas de merge de PR
 (Mesclagem média 72d 6h) (221 fundiu PRs em 30d)

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    

Guia do colaborador