如何在启用ignore_errors的Ansible剧本末尾打印失败任务列表
解决方案
可以实现,核心是利用Ansible自动收集的ansible_failed_tasks变量,结合post_tasks在剧本末尾汇总打印失败任务。直接修改你的剧本如下:
- name: Playbook hosts: all vars_files: - "../vars/passwords.yml" ignore_errors: true # 全局忽略错误,确保剧本完整执行 roles: - role: ansible-role-1 - role: ansible-role-2 post_tasks: - name: 汇总打印所有失败任务 debug: msg: | 以下是执行失败的任务: {% for task in ansible_failed_tasks %} - 角色: {{ task.role | default('无角色') }} 任务名: {{ task.name }} 失败原因: {{ task.msg | default('未记录具体原因') }} {% endfor %} when: ansible_failed_tasks | length > 0 - name: 提示无失败任务 debug: msg: "所有任务执行成功,无失败项" when: ansible_failed_tasks | length == 0
关键说明:
ignore_errors: true:作用于整个play,让Ansible遇到错误时不终止,继续执行后续任务。ansible_failed_tasks:Ansible内置变量,会自动收集所有执行失败的任务信息,每个任务对象包含role(所属角色)、name(任务名称)、msg(失败详情)等字段。post_tasks:会在所有指定角色执行完成后才运行,确保能收集到所有角色的任务结果。
如果需要更详细的失败信息(比如任务所属模块、主机信息),可以在msg里添加更多字段,比如task.module、inventory_hostname等。
内容的提问来源于stack exchange,提问作者Pypynio
相关产品推荐
相关产品推荐

