Инструменты пользователя

Инструменты сайта


linux:ansible:error

Действия в случае ошибки.

Рассмотрим 2 варианта:

  • Мы, в любом случае, хотим выполнить чать задачь, даже если сценарий прекратит работу из-за ошибки.
  • Мы хотим выполнить определенное действие, если сценарий прекратит работу из-за ошибки.
Это возможно реализовать с помощью block + rescue/always.

Примеры.

а) Выполнять задачу после rescue, если основной сценарий выполнился с ошибкой:

- name: Основной сценарий
  block:
    ...
  rescue:
    - name: Выполнить, если произошла ошибка
      debug:
        msg: 'Show error'

б) Выполнять задачу после always независимо от результата выполнения основного сценария:

- name: Основной сценарий
  block:
    ...
  always:
    - name: Выполнить в любом случае
      command: rm -f /tmp/test

в) И то и другое:

- name: Основной сценарий
  block:
    ...
  rescue:
    - name: Выполнить, если произошла ошибка
      debug:
        msg: 'Show error'
  always:
    - name: Выполнить в любом случае
      command: rm -f /tmp/test

* в данном примере мы отобразим текст Show error только при наличии ошибки, а также выполним команду rm -f /tmp/test независимо от исхода работы сценария.

any_errors_fatal

Чтобы при ошибке выполнения на одном из серверов прекратилось выполнение на всех, нужно добавить any_errors_fatal: true перед блоком задач

- name: test-playbook
  hosts: servers
  any_errors_fatal: true
  tasks:
    - name: Создание файла
      file:
        dest: /home/file.txt
        state: touch
        owner: root
        group: root
        mode: 0644

ignore_errors

При запуске playbook, если на одном из серверов какая-либо задаче не выполнилась, то все последующие задачи на этом сервере не будут выполнены, чтобы этого не произошло нужно добавить флаг ignore_errors: yes, тогда если в этой задаче произойдет ошибка последующие все равно будут выполняться.

---
- name: test-playbook
  hosts: servers
  tasks:
    - name: Создание файла
      file:
        dest: /home/file.txt
        state: touch
        owner: root
        group: root
        mode: 0644
      ignore_errors: yes

failed_when

Вы можете использовать ключевое слово error_when для управления поведением задачи

Пример:

---
- name: Test ansible
  hosts: all
  become: yes
 
  tasks:
  - name: Tasks number1
    yum: name=treeee state=present
    ignore_errors: yes
 
  - name: Tasks number2
    shell: echo Hellow world
    register: results
    failed_when: "'world' in results.stdout"
 
  - debug:
      var: results
 
  - name: Tasks number3
    shell: echo Privet Man!
 
...
linux/ansible/error.txt · Последние изменения: 2023/11/27 23:13 — werwolf