我有一个 SaltStack 的 sls 文件,如下所示:
etckeeper:
pkg.installed
etckeeper_extra_packages:
pkg.installed:
- pkgs:
- hwinfo
{%- if not salt['file.directory_exists' ]('/etc/.git') %}
init_etckeeper:
cmd.run:
- name: etckeeper init
{%- endif %}
gitconfig_etckeeper_name:
git.config_set:
- name: user.name
- value: Etckeeper running on {{grains.id}}
- repo: /etc
gitconfig_etckeeper_mail:
git.config_set:
- name: user.email
- value: root@{{grains.id}}
- repo: /etc
{%- if not salt['file.directory_exists' ]('/etc/.git') %}
initial_commit_etckeeper:
cmd.run:
- name: etckeeper commit -m "initial commit"
{%- endif %}
我想让它在第一次不成功的状态/命令/...(如何称呼它?)时失败。
例如,如果 etckeeper 的 pkg.installed 失败,我不希望安装 hwinfo。
这个怎么做?
你可以将这个问题与set -e
shell 中的问题进行比较:
-e 如果命令以非零状态退出,则立即退出。
答案1
你可以只require
在第二个状态中使用第一个状态:
etckeeper:
pkg.installed
etckeeper_extra_packages:
pkg.installed:
- pkgs:
- hwinfo
- require:
- pkg: etckeeper
它不会停止整个执行。如果您有其他一些可以在不安装包的情况下应用的状态,它会。这是先决条件:https://docs.saltstack.com/en/latest/ref/states/requisites.html
如果你确实想立即停止执行,你可以使用
etckeeper:
pkg.installed:
- failhard: True
这是failhard
全局选项:https://docs.saltstack.com/en/latest/ref/states/failhard.html. 请勿滥用其用途。