Ansible block/rescue多失败场景失效问题求助
问题根源:Ansible并行执行下block/rescue的批次性处理
- 默认并行模式(forks>1)下,block/rescue是按批次生效,而非针对单个主机独立处理。
当多个主机同时触发SSH错误时,rescue块会被触发,但此时Ansible的上下文变量(比如inventory_hostname)只会绑定第一个触发故障的主机,后续故障主机的错误会被覆盖,导致只有第一台被加入故障分组。 - serial:1的作用是强制串行执行,每次仅处理一台主机。这样每台主机的block/rescue流程完全独立:某台触发错误就单独进入rescue完成分组,再处理下一台,自然所有故障主机都能被正确识别。
不用serial:1的替代方案
如果不想牺牲并行效率,可以放弃block/rescue,改用逐主机捕获结果+条件判断的方式:
- name: 执行目标命令并捕获执行结果 command: your_target_command register: exec_result ignore_errors: true # 忽略错误,继续执行后续任务 - name: 将故障主机加入failed_hosts分组 add_host: name: "{{ inventory_hostname }}" groups: failed_hosts when: exec_result.failed # 仅针对执行失败的主机执行
这种方式下每个主机的执行结果独立注册,条件判断针对单主机,并行模式下也能正确给所有故障主机分组。
内容的提问来源于stack exchange,提问作者Nathan J
相关产品推荐
相关产品推荐

