I have the next conf files for salt reactor:

  1. reactor.conf
  • 'salt/netapi/hook/cd':
    • /srv/reactor/dev.sls
  1. dev.sls
# vim: sts=2 ts=2 sw=2 et ai

{% set payload = data.get('post') %}

{%      set master = [grains.fqdn] %}

core|api|{{ master }}|jenkins-cd:
    - tgt: {{ master }}
    - mods: myreactor.deploy
    - pillar:
        temp_var_transmit: {{ payload }}
  1. deploy.sls
{%      set payload = salt.pillar.get('temp_var_transmit') %}
{%      set master = [grains.fqdn] %}
    - name: cmd.run
    - tgt: {{ master }}
    - arg:
      - "salt-run state.orch my-reactor.cd_state pillar='{\"temp_var_transmit\":{\"host\":\"{{payload['host']}}\",\"artifact_id\":\"{{payload['artifact_id']}}\",\"artifact_version\":\"{{payload['artifact_version']}}\"}}'"
{% endfor %}

4. cd_state.sls

{% set data = salt.pillar.get('temp_var_transmit') %}
    - tgt: {{ member }}
    - expr_form: compound
    - sls: '{{ data.artifact_id }}_{{ data.artifact_version }}'
    - queue: true
    - test: {{ dry_run_mode }}

When I send API request and run salt-runner.events, I get the next error:

jid": "20180119065728472630", 
    "return": "Exception occurred in runner state.orchestrate: Traceback (most recent call last):\n  File \"/usr/lib/python2.7/dist-packages/salt/client/mixins.py\", line 395, in _low\n    data['return'] = self.functions[fun](*args, **kwargs)\nTypeError: orchestrate() argument after ** must be a mapping, not list\n", 
    "success": false, 
    "user": "Reactor"

Any thoughts?

  • 2
    TypeError: orchestrate() argument after ** must be a mapping, not list\n" => sounds like you have a problem in your payload (or jsut a hyphen missing before your temp_var_transmit
    – Tensibai
    Jan 19, 2018 at 15:13
  • What version of saltstack are you running? Jan 19, 2018 at 18:07
  • @JamesShewey, 2016.11.1 (Carbon)
    – user54
    Jan 19, 2018 at 18:11
  • You might try upgrading to nitrogen to see if there was a known issue. Jan 19, 2018 at 18:15
  • Unfortunately, can not upgrade in my case.
    – user54
    Jan 19, 2018 at 18:20

1 Answer 1


I was able to find the root of issue. The problem was in the configuration of salt master. After every change of reactor config, I must run salt-call state.highstate command on master to sync reactor source code changes with it. I missed this step and thus my reactor config differed from my original source code in IDE. So once I ran mentioned command, everything became in sync. Thanks everybody for help!

P.S. regarding mentioned error, it occurred because I used kwarg in dev.sls for pillar and represented pillar as list:

>     kwarg:
>      - pillar:
>          temp_var_transmit: {{ payload }}

Kwarg can not contain a list in this case. It may contain key:value format only. So the correct way is either use without kwarg as I did or remove hyphen near pillar.

  • You might be relieved to know that things are changing in Nitrogen (if you every find you can upgrade) and you can change the kwargs behavior beginning in this version. I would expect that might become the default behavior in oxygen or flurorine and the old syntax deprecated at some point. Jan 22, 2018 at 21:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.