是否有一个 Salt 要求只有在另一个状态没有 运行 时才会执行一个状态

Is there a Salt requisite that will execute a state only if another state has not run

我有一种情况,如果另一个状态不执行,我只想执行一个加盐状态 运行。这可能吗?

例如

预期的行为是:

If file-abc changes:
   execute State2

If State2 did not execute:
   execute State3

这里的要求是如果 State2 不应该,State3 应该 运行,并且除了单个文件更改之外,State2 可能有很多未来的原因 运行。

状态 1

test-state-file1:
  file.managed:
    - name: /data/test-file1
    - source: salt://foo-states/test-file

状态2

test-state2-echo:
  cmd.run:
    - name: echo "Test State 2"
    - onchanges:
      - file: /data/test-file1

状态 3 - 只有 运行 如果状态 1 和状态 2 不 运行。

test-state3-echo:
  cmd.run:
    - name: echo "Test State 3"

没有任何类型的必要条件是其他州的负面条件。完成你所要求的(虽然可能不是你想要的)的方法是使用 unless 来执行命令。尝试:

one:
  test.succeed_without_changes

two:
  cmd.run:
    - name: echo 'hi' > /tmp/fun.txt
    - onchanges:
      - test: one

three:
  test.succeed_with_changes:
    - unless:
      - grep 'hi' /tmp/fun.txt

您会看到三个 运行。改成

one:
  test.succeed_with_changes

您会看到两个 运行,但不会看到三个。

根据您真正想要完成的事情,这可能适合您,但也可能有更好的方法来完成您想要做的事情。