在任何条件下运行特定角色

在任何条件下运行特定角色

我创建了一个名为的角色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"

Ansible 块

相关内容