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

Ansible列表变量更新异常:如何将disks中gb值转为整数?

解决Ansible批量转换列表字典中gb值为整数的问题

问题原因

你当前的任务写法错误在于同时使用loop和map,且在map的combine操作中引用了loop的item变量。loop循环结束后,item会保留最后一次循环的取值(即gb为16.00的磁盘项),导致map处理所有磁盘元素时,都用了最后一个item的gb值,最终所有项的gb都变成16。

正确解决方案

方案1:使用Jinja2列表推导式(直观易读)

直接遍历原disks列表,逐个转换gb值并生成新列表:

- name: Update disk sizes to integers
  set_fact:
    disks: >-
      {% set updated = [] %}
      {% for d in disks %}
        {% set _ = updated.append(d | combine({'gb': (d.gb | float | round(0, 'common') | int)})) %}
      {% endfor %}
      {{ updated }}

方案2:使用map结合元素遍历(简洁写法)

利用map遍历每个磁盘项,无需额外loop,直接在map中处理当前元素:

- name: Update disk sizes to integers
  set_fact:
    disks: "{{ disks | map('update', {'gb': (item.gb | float | round(0, 'common') | int)}) | list }}"

验证结果

执行任务后,disks变量会变为:

disks:
  - gb: 17
    type: flat
    number: 12
  - gb: 16
    type: flat
    number: 12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 23:30:15