Search code examples
deploymentsalt-project

How to pass parameters to an SLS file via another SLS file in SaltStack?


I have an SLS file in SaltStack Orchestrator which contains something like this:

Plan A:
  salt.state:
    - tgt: my-server
    - sls: service-a

Plan B:
  salt.state:
    - tgt: my-server
    - sls: service-a
    - onfail:
      - Plan A

And inside service-a SLS file I have something like this:

{% set image = pillar["image"] | default("service-api") %}
{% set version = pillar["version"] %}

Deploy A:
  cmd.run:
    - name: docker-compose -f {{version}}/docker-compose.yml up
    ..... (+ many lines of other commands and codes)

Now, the problem is, when Plan A failed, then Plan B should do the rollback, but it does the same and fails again because I didn't change the version variable inside the service-a SLS file. I want to change the version variable inside the service-a SLS file via the Orchestrator file. For example, when it goes to Plan B then it should change the version to old. The only way I know is it can be handled by Python modules, but as far as possible I wanna address it by SLS files.


Solution

  • In the orchestrator file just add the pillar parameter:

    Plan B:
      salt.state:
        - tgt: my-server
        - sls: service-a
        - pillar:
            version: old
        - onfail:
          - Plan A
    

    Only in the state Plan B, the value of the version pillar will be old.