2

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:
  runner.state.orchestrate:
    - 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] %}
my_state:
  salt.function:
    - 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') %}
my_deploy:
  salt.state:
    - 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 '18 at 15:13
  • What version of saltstack are you running? – James Shewey Jan 19 '18 at 18:07
  • @JamesShewey, 2016.11.1 (Carbon) – user54 Jan 19 '18 at 18:11
  • You might try upgrading to nitrogen to see if there was a known issue. – James Shewey Jan 19 '18 at 18:15
  • Unfortunately, can not upgrade in my case. – user54 Jan 19 '18 at 18:20
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.

| improve this answer | |
  • 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. – James Shewey Jan 22 '18 at 21:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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