ansible - 如何处理来自 ansible 角色的错误
问题描述
我一直在调用具有多个角色的剧本,每个角色都表示一个 TESTCASE。如果其中一个角色在执行期间失败,我需要运行剧本而不失败。我正在使用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 }
问题:如何执行整个剧本并最后打印失败的角色?
解决方案
一个选项是使用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 ] }}"
并循环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([])
使用loop_control loop_var并创建唯一变量,例如item_my_role,避免包含角色内部的潜在冲突。如果变量在包含的角色中使用,则以下救援部分会将错误的项目添加到列表中。
推荐阅读
- c - freeRTOS环境中公共变量的存储区域
- user-interface - 如何在 IntelliJ IDE 中以无干扰模式切换到相邻选项卡?
- angular - 预启动非工作客户端应用程序 - Angular 6 通用
- objective-c - 如何更改 UIAlertAction 字体?
- javascript - 为什么在另一个锚内动态创建锚时href不起作用?
- c# - 检查 System.Collections.IList 的任何项目是否为空
- macos - 为 wine/heidisql 创建 Mac 启动器脚本的问题
- java - 尽管已初始化 HashMap,但 HashMap.put 方法仍不起作用
- android - Dagger 2 - 构造函数注入 - 非活动
- python - for if 循环根据条件进行分类