В настоящее время я пишу игру Ansible, которая следует этому общему формату и запускается через задание cron:
pre_tasks:
-Configuration / package installation
tasks:
-Work with installed packages
post_tasks:
-Cleanup / uninstall packages
Проблема с вышеизложенным заключается в том, что иногда команда в разделе tasks
завершается ошибкой, а когда это происходит, раздел post_tasks
не запускается, оставляя систему в запутанном состоянии. Можно ли принудительно запустить команды в post_tasks
, даже если произойдет сбой или фатальная ошибка?
Мой текущий подход состоит в том, чтобы применить ignore_errors: yes
ко всему в разделе tasks
, а затем применить условие when:
к каждой задаче, чтобы индивидуально проверить, была ли выполнена предыдущая команда.
Это решение похоже на взлом, но становится еще хуже, потому что даже с установленным ignore_errors: yes
, если для задачи возникает фатальная ошибка, все воспроизведение все равно немедленно завершается сбоем, поэтому мне также нужно запустить bash-скрипт cron, чтобы вручную проверить вещи после достижения играть исполнение.
Все, что мне нужно, это гарантия того, что даже если tasks
выйдет из строя, post_tasks
все равно будет работать. Я уверен, что есть способ сделать это, не прибегая к оболочкам сценариев bash.
post_tasks
не предназначен для очистки. Цитируя руководство ansible: предварительные и пост-задачи в значительной степени предназначены для работы с балансировщиками нагрузки. (github.com/ansible/ansible/issues/3869) - person Todd Owen   schedule 17.06.2014