我刚开始使用saltstack,所以任何人都可以帮助解决这个问题:如果一个语句内部失败,如何使整个state.sls失败?是必需品
需要/表
适合这个吗?
答案 0 :(得分:4)
您可以使用必需品,所有依赖状态都将失败,并且所需的状态也会失败。
另一种方法是在单个状态失败时中止整个执行:
abort_on_failure_state_example:
test.fail_without_changes:
- failhard: True
不会执行进一步的状态,即使是来自其他包含的sls文件的状态。 我使用它来确保在应用状态之前设置一些必需的颗粒,而不必在每个状态上检查/要求它们。
https://docs.saltstack.com/en/latest/ref/states/failhard.html
中记录了这一点答案 1 :(得分:1)
好。您可以指定仅在成功应用其他状态时才应用某个状态。像这样:
vim:
pkg.installed: []
/etc/vimrc:
file.managed:
- source: salt://edit/vimrc
- require:
- pkg: vim
只有在安装了vim包的情况下才会管理vimrc文件。如果已经安装了vim,或者在此状态之后它是新安装的软件包,则它不会生成任何内容。如果成功安装了pkg:vim,它将运行第二个状态。
如果您的特殊状态可能会失败,这将非常有用。您可以将require
添加到所有其他状态,以确保只有在此特殊状态成功时才会应用它们。
回答你的问题:
如果其中一个失败,则无法使state.sls中的所有状态失败。您可以通过运行带有salt '*' state.apply state test=True
的state.sls来解决此问题,看看会发生什么。如果其中一个州失败,您可以决定不实际申请该州。
我希望这能回答你的问题。如果仍然不清楚你可能想提出一个例子: - )