如何处理来自角色的错误

时间:2019-04-04 16:40:29

标签: ansible

我一直在呼叫具有多个角色的剧本,每个角色都表示一个TESTCASE。如果角色之一在执行过程中失败,则我需要运行剧本而不使其失败。我正在为此使用ignore_errors: yes。但是,这确实忽略了错误,我需要在最后打印失败的ROLES的名称?有可能吗?

- hosts: WEB
  gather_facts: no
  vars:
  roles:
        - { role:  CHECK_CONNECTION, ignore_errors: yes, tags: always }
        - { role:  CHECK_CPU,ignore_errors: yes, tags: always }
        - { role:  CHECK_MEM,ignore_errors: yes, tags: always }

问题:如何执行整个剧本,最后打印失败的角色?

1 个答案:

答案 0 :(得分:1)

一种选择是使用Blocks

rescue 部分

创建 include_role.yml

- name: include role
  block:
    - include_role:
        name: "{{ item }}"
  rescue:
    - set_fact:
        failed_roles: "{{ failed_roles|default([]) + [ item ] }}"

并循环 include_tasks 。无法循环块。

  vars:
    my_roles:
      - CHECK_CONNECTION
      - CHECK_CPU
      - CHECK_MEM
  tasks:
  - include_tasks: include_role.yml
    loop: "{{ my_roles }}"
  - debug:
      var: failed_roles|default([])