Я создал роль под названием cleanup
это моя последняя роль в playbook (который выполняет некоторые очистки после запуска всех других ролей)
вот упрощенная версия моей пьесы
- hosts: myhost
roles:
- common
- postgresql
- rabbitmq
- web
- cleanup
проблема в том, что если playbook не работает, ansible не запускает чистую роль, как я могу отметить эту конкретную роль как важную, чтобы ansible запускал ее, даже если все другие роли в playbook потерпели неудачу?
В Ansible есть функция ignore_errors для задач. Но твой случай обо всей роли. Я думаю, вы можете разделить роли двух глав в файле playbook. Это сложно, но эффективно.
- hosts: myhost
roles:
- common
- rabbitmq
- hosts: myhost
roles:
- cleanup
Так что, если вы поднимете ошибку в первой главе, playbook продолжит работу в следующей главе :)
Также ! В Ansible 2.0 появился новый блочный механизм, это не совсем то, что вам нужно, но, возможно, вы думаете переделать свой логический механизм.
tasks:
block:
- debug: msg='i execute normally'
- command: /bin/false
- debug: msg='i never execute, cause ERROR'
rescue:
- debug: msg='I caught an error'
- command: /bin/false
- debug: msg='I also never execute :-('
always:
- debug: msg="this always executes"