У меня есть файл sls для SaltStack, который выглядит так:
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 %}
Я хотел бы, чтобы это завершилось ошибкой при первом неудачном состоянии / команде / ... (или вызвать это?)
Например, если pkg.installed для etckeeper не удается, я не хочу, чтобы hwinfo устанавливался.
Как это сделать?
Вы можете сравнить этот вопрос с set -e
в оболочке:
-e Немедленный выход, если команда завершается с ненулевым статусом.
Вы можете просто 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. Не злоупотребляйте его использованием.