Насколько я могу судить, ansible выполняет только обработку ошибок. на уровне задач, чего действительно недостаточно для того, что я хочу, чтобы он мог делать.
В частности, мой вариант использования - это обычное развертывание, поэтому мне нужно сделать следующее:
Все это прекрасно, кроме подхода к обработке ошибок, который, как я надеялся, сработает ...
- include: deploy.yml
ignore_errors: yes
register: deploy
- include: rollback.yml
when: deploy | failed
... Нет.
Теперь я могу понять, почему это не так - задача включения просто проверяет, может ли она включить файл, а не может ли включенный файл работать до завершения. Я смирился с этим.
К сожалению, это оставляет меня в некотором роде. Автоматическая проверка ошибок каждой операции в сочетании с библиотекой высокоуровневых операций - вот вся причина, по которой я использую ansible. Но в отсутствие зрелого механизма восстановления уведомление об отказе перестает быть полезным.
У кого-нибудь есть (вменяемые) обходные пути? Я мог бы добавить обработчик к каждой отдельной задаче под этим include
и попробуй сделать так, но ... правда? Это не может быть решением - или, скорее, я не могу продолжать верить в человечество и позвольте этому быть решением.
http://www.ansible.com/blog/ansible-2.0-launch
Блоки вводят концепцию обработки исключений в playbooks и были смоделированы после структуры try / except / finally Python (и многих других языков). Это упрощает разработку сценариев и задач, где сбои задач могут быть обнаружены и устранены с помощью одного сценария гораздо проще, чем раньше.