Ansible Playbook:role3失败后执行final-role并返回失败状态的实现
解决Ansible Playbook中role3失败后执行final-role并返回失败状态的问题
你的核心问题在于原Playbook里的meta: clear_host_errors会清除主机错误状态,导致role3失败后Playbook最终返回成功。要满足所有三个目标,需要保留role3的失败标记,在执行完final-role后手动触发Playbook的失败状态。
修改后的Playbook示例
--- - hosts: "{{ target }}" gather_facts: no vars: role3_failed: false # 初始化失败标记变量 roles: - role1 - role2 tasks: - block: - name: 执行role3 ansible.builtin.include_role: name: role3 rescue: - name: 标记role3执行失败 ansible.builtin.set_fact: role3_failed: true # 不再使用clear_host_errors,保留错误上下文但继续执行后续任务 - name: 执行final-role收尾 ansible.builtin.include_role: name: final-role - name: role3失败时触发Playbook失败状态 ansible.builtin.fail: msg: "role3执行失败,已完成final-role收尾操作" when: role3_failed
关键逻辑说明
- 满足目标1:如果role1或role2失败,Play会直接终止,不会进入后续tasks阶段,自然不会运行final-role。
- 满足目标2:role3失败会触发rescue块,标记失败状态后继续执行后续的final-role。
- 满足目标3:执行完final-role后,通过
fail模块判断role3_failed标记,若为true则手动触发失败,让整个Playbook最终返回FAILED状态,和role3直接失败时的状态一致。
内容的提问来源于stack exchange,提问作者Fr0zt
相关产品推荐
相关产品推荐

