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

Ansible循环任务中单条失败时如何获取所有条目执行结果?

Ansible HTTP重定向检查任务调整方案

问题根因

默认配置下Ansible只要有任务执行失败,就会终止后续所有任务的运行。你的第一个重定向检查任务只要有一个循环项满足failed_when规则被标记为失败,整个任务就会判定为失败,后续的打印任务自然不会执行。

解决方法

方法1:使用你找到的忽略错误配置

直接在第一个检查任务的failed_when: result.redirected is false行后追加ignore_errors: true即可,修改后即使检查任务有失败项,也会继续执行后续的打印任务,符合你预期的输出效果。
调整后的完整playbook代码如下:

---
- hosts: localhost
  tasks:
    - name: Check http redirect
      uri:
        url: "{{item}}"
        method: GET
      loop:
        - http://www.stackoverflow.com
        - http://www.twitter.com
        - http://www.example.com
      register: result
      failed_when: result.redirected is false
      ignore_errors: true

    - name: Print return information from the previous task
      ansible.builtin.debug:
        var: result.results[index].url
      loop:
        - http://www.stackoverflow.com
        - http://www.twitter.com
        - http://www.example.com
      loop_control:
        index_var: index

注意:原打印任务中的result.results[{{index}}].url写法有误,var参数本身处于Jinja2解析上下文,不需要额外加{{}}包裹index,已修正为result.results[index].url

方法2:直接提取所有重定向成功的URL

如果你不需要逐个打印结果,只想拿到所有重定向成功的URL列表,可以直接通过Jinja2过滤器从注册的result变量中过滤,不需要单独循环:

- name: 输出所有成功重定向的URL列表
  ansible.builtin.debug:
    msg: "{{ result.results | selectattr('redirected', 'equalto', True) | map(attribute='url') | list }}"

这个任务会直接输出所有重定向成功的URL,不需要依赖循环索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:24:04