Я хотел бы знать, в каком состоянии 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 спроектирована как «отказоустойчивая» и упорядоченная система [...]
fail-fast
означает, что Ansible остановит выполнение всей игры, как только одна задача не удастся (если вы не установите ignore_errors: True
параметр для задачи.)
Документация по post_tasks
является неполным, но если вы напишете себе небольшой тестовый сценарий и роль, вы увидите, что Ansible ведет себя так, как ожидалось.
Это имеет смысл, потому что вы можете использовать pre_tasks
и post_tasks
для удаления и добавления узла из кластера и в кластер, и вы не хотите, чтобы ваш узел был добавлен в кластер, если роль не выполнялась без ошибок.