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

Условия выполнения Ansible Post Tasks

Я хотел бы знать, в каком состоянии Ansible post_task будет выполнен? Если бы предварительные задачи или роли потерпели неудачу, были бы выполнены постзадачи?

Например, я хотел бы очистить сервер тогда и только тогда, когда он остановлен. В следующем сценарии будет server_dir удалить, если сервер не остановлен правильно?

---

- hosts: webservers

  pre_tasks:
    - shell: echo 'stopping server...'

  roles:
    - { role: stop_server }

  post_tasks:
    - file: path="{{ server_dir }}" state=absent

Задачи под post_tasks не будет выполняться, если предыдущие задачи завершились неудачно (это означает, что код возврата задачи не равен 0). Это поведение Ansible по умолчанию и часть дизайна Ansible:

На самом деле Ansible спроектирована как «отказоустойчивая» и упорядоченная система [...]

Ansible test_strategies

fail-fast означает, что Ansible остановит выполнение всей игры, как только одна задача не удастся (если вы не установите ignore_errors: True параметр для задачи.)

Документация по post_tasks является неполным, но если вы напишете себе небольшой тестовый сценарий и роль, вы увидите, что Ansible ведет себя так, как ожидалось.

Это имеет смысл, потому что вы можете использовать pre_tasks и post_tasks для удаления и добавления узла из кластера и в кластер, и вы не хотите, чтобы ваш узел был добавлен в кластер, если роль не выполнялась без ошибок.