it-swarm.com.ru

Ansible Игнорировать ошибки в задачах и завершать сбоем в конце книги, если какие-либо задачи имели ошибки

Я учу Ansible. У меня есть книга игр для очистки ресурсов, и я хочу, чтобы книга игр игнорировала каждую ошибку и продолжала работать до конца, а затем не работала в конце, если были ошибки.

Я могу игнорировать ошибки с

  ignore_errors: yes

Если бы это была одна задача, я мог бы сделать что-то вроде (из-за обнаружения ошибок)

- name: this command prints FAILED when it fails
  command: /usr/bin/example-command -x -y -z
  register: command_result
  ignore_errors: True

- name: fail the play if the previous command did not succeed
  fail: msg="the command failed"
  when: "'FAILED' in command_result.stderr"

Как мне потерпеть неудачу в конце? У меня есть несколько задач, каким будет мое условие "Когда"?

36
Illusionist

Используйте Fail модуль.

  1. Используйте ignore_errors с каждой задачей, которую нужно игнорировать в случае ошибок.
  2. Установите флаг (скажем, result = false) всякий раз, когда происходит сбой в выполнении любой задачи
  3. В конце playbook, проверьте, установлен ли флаг, и в зависимости от этого, провалите выполнение
- fail: msg="The execution has failed because of errors."
  when: flag == "failed"

Обновление:

Используйте регистр, чтобы сохранить результат задачи, как вы показали в своем примере. Затем используйте задачу вроде этой:

- name: Set flag
  set_fact: flag = failed
  when: "'FAILED' in command_result.stderr"
25
clever_bassi

Вы можете обернуть все задачи, которые могут потерпеть неудачу в блоке, и использовать ignore_errors: yes с этим блоком.

tasks:
  - name: ls
    command: ls -la
  - name: pwd
    command: pwd

  - block:
    - name: ls non-existing txt file
      command: ls -la no_file.txt
    - name: ls non-existing pic
      command: ls -la no_pic.jpg
    ignore_errors: yes 

Подробнее об обработке ошибок в блоках здесь .

14
Olga

Модуль Fail работает отлично! Спасибо.

Я должен был определить свой факт перед проверкой, иначе я получил бы неопределенную ошибку переменной.

И у меня были проблемы при установке факта с кавычками и без пробелов.

Это сработало:

set_fact: flag="failed"

Это выкинуло ошибки:

set_fact: flag = failed 
1
dank