如何通过 SaltStack 中的另一个 SLS 文件将参数传递给 SLS 文件?

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

我在 SaltStack Orchestrator 中有一个 SLS 文件,其中包含如下内容:

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

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

service-a SLS 文件中我有这样的东西:

{% 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)

现在,问题是,当 Plan A 失败时,Plan B 应该进行回滚,但它做了同样的事情并再次失败,因为我没有更改 version service-a SLS 文件中的变量。我想通过 Orchestrator 文件更改 service-a SLS 文件中的 version 变量。例如,当它转到 Plan B 时,它应该将 version 更改为 old。 我知道的唯一方法是它可以由 Python 模块处理,但我想尽可能地通过 SLS 文件解决它。

在 orchestrator 文件中只需添加 pillar 参数:

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

只有处于状态Plan Bversion支柱的价值将是old.