You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible技术问询:如何让任务标记失败但继续执行Playbook?

解决Ansible跨主机端口测试:失败标记但不终止剧本执行

针对你遇到的问题——既要让端口测试失败时显示红色错误标记,又要让整个剧本执行完毕不中途停止,以下是两种可行方案:

方案1:使用continue_on_error参数(Ansible 2.11+)

这是最简洁的方法,利用Ansible内置参数实现任务失败后继续执行,同时保留错误标记。

修改后的ISM主机测试片段:

- hosts: '{{ env_type }}_ism'
  gather_facts: false
  become_method: runas
  become_user: System
  tasks:
    - name: Test ISM to IRE 2861
      ansible.windows.win_wait_for:
        host: "{{ item }}"
        port: 2861
        timeout: 3
      loop: "{{ groups[ire] }}"
      # 任务失败时标记为错误(红色显示)
      failed_when: true
      # 允许该主机后续任务继续执行
      continue_on_error: yes

同理修改IRE主机的测试任务:

- hosts: '{{ env_type }}_ire'
  gather_facts: false
  become_method: runas
  become_user: System
  tasks:
    - name: Test IRE to IFS 445
      ansible.windows.win_wait_for:
        host: "{{ item }}"
        port: 445
        timeout: 3
      loop: "{{ groups[afs] }}"
      failed_when: true
      continue_on_error: yes

说明

  • continue_on_error: yes:单个任务失败后,该主机的后续任务不会终止,继续执行
  • failed_when: true:只要win_wait_for检测失败,就标记任务为错误(红色显示),无需额外捕获结果
  • 跨主机的play不受影响,即使某台主机的任务失败,其他主机的play仍会正常执行

方案2:兼容旧版Ansible(2.10及以下)

如果你的Ansible版本低于2.11,可以用register+fail+meta: clear_host_errors的组合实现:

- hosts: '{{ env_type }}_ism'
  gather_facts: false
  become_method: runas
  become_user: System
  tasks:
    - name: Test ISM to IRE 2861
      ansible.windows.win_wait_for:
        host: "{{ item }}"
        port: 2861
        timeout: 3
      register: port_test
      ignore_errors: yes
      loop: "{{ groups[ire] }}"

    - name: Mark failed tests as errors
      ansible.builtin.fail:
        msg: "Port 2861 test failed for host {{ item.item }}"
      loop: "{{ port_test.results }}"
      when: item.failed
      # 标记错误但不终止后续任务
      ignore_errors: no

    - name: Clear host error state to continue execution
      meta: clear_host_errors

说明

  1. 用register捕获所有端口测试的结果
  2. 遍历结果,对失败的测试用fail模块标记为错误(红色)
  3. meta: clear_host_errors清除主机的错误状态,确保后续任务能继续执行

注意事项

  • 两种方案都不会终止整个剧本,所有跨主机的play都会执行完毕
  • 失败的任务会在输出中显示为红色错误,便于快速定位问题
  • 方案1的continue_on_error是任务级参数,只影响当前主机的后续任务,其他主机不受影响

内容的提问来源于stack exchange,提问作者StanS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 01:36:33