如果其中一个语句失败,如何使整个 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
中有记录
我刚开始使用 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
中有记录