如果一个语句内部失败,如何使整个state.sls失败

时间:2017-05-03 16:58:32

标签: salt-stack configurationmanager

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

  

需要/表

适合这个吗?

2 个答案:

答案 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来解决此问题,看看会发生什么。如果其中一个州失败,您可以决定不实际申请该州。

我希望这能回答你的问题。如果仍然不清楚你可能想提出一个例子: - )