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

Ansible循环计算仅返回最后结果,如何获取全部有效计算值?

解决Ansible循环计算百分比并收集所有结果的问题

方法1:通过set_fact累加结果列表

直接在循环中把每次计算的百分比追加到列表变量中,避免单次set_fact覆盖之前的结果:

- name: 计算并收集百分比结果
  hosts: localhost
  vars:
    dict1:
      - {x: 50, y: 100}
      - {x: 30, y: 60}
      - {x: 20, y: 50}
  tasks:
    # 初始化空列表存储结果
    - name: 初始化结果列表
      set_fact:
        percentage_results: []

    # 循环计算百分比并追加到列表
    - name: 计算百分比
      set_fact:
        percentage_results: "{{ percentage_results + [ (item.x / item.y * 100) | round(2) ] }}"
      with_items: "{{ dict1 }}"
      when: item.y != 0  # 防止除零错误

    # 查看最终结果
    - name: 输出所有百分比
      debug:
        var: percentage_results

执行后,percentage_results会包含所有有效计算值,示例结果为[50.0, 50.0, 40.0]。

方法2:从register结果中提取有效数据

如果已经用register收集了循环结果,可通过过滤器提取需要的百分比值:

- name: 从register结果提取百分比
  hosts: localhost
  vars:
    dict1:
      - {x: 50, y: 100}
      - {x: 30, y: 60}
      - {x: 20, y: 50}
  tasks:
    # 循环计算并注册所有结果
    - name: 计算百分比并注册
      set_fact:
        current_percent: "{{ (item.x / item.y * 100) | round(2) }}"
      with_items: "{{ dict1 }}"
      when: item.y != 0
      register: calc_output

    # 过滤并提取有效百分比
    - name: 提取结果
      set_fact:
        percentage_results: "{{ calc_output.results | selectattr('skipped', 'undefined') | map(attribute='ansible_facts.current_percent') | list }}"

    # 输出结果
    - name: 查看百分比列表
      debug:
        var: percentage_results

关键说明

  • selectattr('skipped', 'undefined'):过滤掉因when条件不满足而跳过的任务结果(比如y=0的情况)。
  • map(attribute='ansible_facts.current_percent'):从每个循环结果中提取计算得到的百分比值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:25:18