Назад | Перейти на главную страницу

SaltStack: Остановить при первой ошибке

У меня есть файл 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. Не злоупотребляйте его использованием.