如果其中一个语句失败,如何使整个 state.sls 失败

How to fail the whole state.sls if one statement inside fails

我刚开始使用 saltstack,所以任何人都可以帮助解决这个问题:如果其中一个语句失败,如何让整个 state.sls 失败?是必需品

require/watch

适合这个吗?

嗯。您可以指定只有在成功应用另一个状态时才会应用某个状态。像这样:

vim:
  pkg.installed: []

/etc/vimrc:
  file.managed:
    - source: salt://edit/vimrc
    - require:
      - pkg: vim

vimrc 文件只有在软件包 vim 安装成功后才会被管理。 vim 是否已经安装或者它是在此状态之后新安装的软件包都没有关系。如果 pkg: vim 成功安装,它将 运行 第二种状态。

如果您有一个可能会失败的特定状态,这将很有用。您可以将 require 添加到所有其他状态,以确保仅当此特定状态成功时才应用它们。

回答你的问题: 如果其中一个失败,则不可能使 state.sls 内的所有状态都失败。您可以通过 运行 将您的 state.sls 与 salt '*' state.apply state test=True 结合来解决这个问题,看看会发生什么。如果其中一个状态失败,您可以决定不实际应用该状态。

我希望这能回答您的问题。如果仍然不清楚,您可能想举个例子:-)

您可以使用必要条件,所有 依赖 状态以及所需状态都会失败。

另一种方法是 中止 单个状态失败时的整个执行:

abort_on_failure_state_example:
  test.fail_without_changes:
    - failhard: True

不会执行进一步的状态,即使是来自其他包含的 sls 文件的状态。 我用它来确保在应用状态之前设置一些必需的粒度,而不必在每个状态上 check/require 它们。

这在 https://docs.saltstack.com/en/latest/ref/states/failhard.html

中有记录