Search code examples
salt-projectconcourse

How to pass multiple arguments into salt cmd.run?


I have just started using Salt instead of Ansible. I am unsure whether to call the following script from the master or manually enter the commands into a salt state. For the latter can anyone suggest how to achieve this using cmd.run.

#!/bin/bash

. /lib/lsb/init-functions

cd /opt/concourse/bin/

./concourse worker \
  --name ci_worker01 \
  --bind-ip 0.0.0.0 \
  --bind-port 7777 \
  --work-dir /opt/concourse/worker \
  --tsa-host 127.0.0.1 \
  --tsa-port 2222 \
  --tsa-public-key /opt/concourse/.ssh/id_web_rsa.pub \
  --tsa-worker-private-key /opt/concourse/.ssh/id_worker_rsa &>/var/log/concourse/concourse_worker.log &

Solution

  • You could save your script to a file and call it using cmd.script state like this:

    concourse_script:
      cmd.script:
        - name: salt://scripts/concourse.sh
    

    Or you could use the same state to call the command and pass the args:

    concourse_cmd:
      cmd.script:
        - name: ./concourse worker
        - cwd: /opt/concourse/bin/
        - args: "'--name ci_worker01' '--bind-ip 0.0.0.0' '--bind-port 7777' '--work-dir /opt/concourse/worker' '--tsa-host 127.0.0.1' '--tsa-port 2222' '--tsa-public-key /opt/concourse/.ssh/id_web_rsa.pub' '--tsa-public-key /opt/concourse/.ssh/id_web_rsa.pub'"
    

    Mind that to pass a string containing spaces in YAML, you will need to doubly-quote it.