【问题标题】:How to fail the whole state.sls if one statement inside fails如果内部的一个语句失败,如何使整个 state.sls 失败
【发布时间】:2017-07-17 20:20:21
【问题描述】:

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

要求/观看

适合这个吗?

【问题讨论】:

    标签: salt-stack configurationmanager


    【解决方案1】:

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

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

    abort_on_failure_state_example:
      test.fail_without_changes:
        - failhard: True
    

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

    这在https://docs.saltstack.com/en/latest/ref/states/failhard.html中有记录

    【讨论】:

      【解决方案2】:

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

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

      vimrc 文件只有在 vim 包安装成功后才会被管理。如果 vim 已经安装或者在此状态之后它是新安装的包,这并不重要。如果 pkg: vim 安装成功,它将运行第二个状态。

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

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

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

      【讨论】:

      • 谢谢 :) 这就是我需要确保事情进展顺利。
      猜你喜欢
      • 2019-12-12
      • 2017-07-04
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多