我创建了一个名为的角色cleanup
,这是我在剧本中的最后一个角色(它在运行所有其他角色后处理一些清理工作)
这是我的剧本的简化版本
- hosts: myhost
roles:
- common
- postgresql
- rabbitmq
- web
- cleanup
问题是,如果剧本失败,ansible 就不会运行干净的角色,我该如何将该特定角色标记为重要,以便即使剧本中的所有其他角色都失败了,ansible 也会运行它?
答案1
Ansible 具有针对任务的 ignore_errors 功能。但您的案例涉及整个角色。我认为您可以在剧本文件中将角色分为两章。这很棘手但很有效。
- hosts: myhost
roles:
- common
- rabbitmq
- hosts: myhost
roles:
- cleanup
因此,如果您提出第一章剧本中的任何失败,将继续下一章:)
另外!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"