我一直在调用具有多个角色的剧本,每个角色都代表一个测试用例。如果角色之一在执行过程中失败,我需要运行剧本而不会失败。我正在使用ignore_errors: yes. 但是,这确实忽略了错误,我需要在最后打印失败的角色的名称?是否可以 ?
- 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 }
Run Code Online (Sandbox Code Playgroud)
问题:如何执行整个剧本并最终打印失败的角色?
一种选择是使用Blocks的救援部分
创建include_role.yml
- name: include role
block:
- include_role:
name: "{{ item_my_role }}"
rescue:
- set_fact:
failed_roles: "{{ failed_roles|default([]) + [ item_my_role ] }}"
Run Code Online (Sandbox Code Playgroud)
并循环include_tasks。不可能循环块。
vars:
my_roles:
- CHECK_CONNECTION
- CHECK_CPU
- CHECK_MEM
tasks:
- include_tasks: include_role.yml
loop: "{{ my_roles }}"
loop_control:
loop_var: item_my_role
- debug:
var: failed_roles|default([])
Run Code Online (Sandbox Code Playgroud)
使用loop_control loop_var并创建唯一变量,例如item_my_role,避免包含的角色内部的潜在冲突。如果在包含的角色中使用该变量,则以下救援部分会将错误的项目添加到列表中。
| 归档时间: |
|
| 查看次数: |
2085 次 |
| 最近记录: |