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
相关产品推荐
相关产品推荐

