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

Ansible计算RAID容量返回字符串而非整数引发类型错误

解决Ansible中Loop计算RAID容量后变量为字符串类型的问题

问题背景

通过Loop累加RAID1磁盘总容量时,set_fact会将结果自动转换为字符串类型,后续调用HPE iLO的CreateLogicalDrivesWithParticularPhysicalDrives命令时,因模块需要整数类型的容量参数,出现TypeError: '<' not supported between instances of 'int' and 'str'错误。

解决方案

方法1:直接用过滤器筛选求和(推荐,无需Loop)

跳过循环累加,使用json_query筛选符合条件的磁盘,再通过sum过滤器直接计算总容量,结果天然为整数类型:

- name: Calculate RAID1 Disk Total Capacity
  set_fact:
    total_capacity_R1: "{{ physical_drives.ilo_storage.GetPhysicalDrives.msg.physical_drives['array_controller_0'] | json_query('[?CapacityGB==`300`].CapacityGB') | sum }}"

说明:

  • json_query('[?CapacityGB==300].CapacityGB')筛选出所有容量为300GB的磁盘容量值
  • sum过滤器直接对筛选结果求和,返回整数类型,无需额外类型转换

方法2:收集符合条件的容量再求和(兼容Loop场景)

如果必须保留Loop逻辑,可先收集所有目标磁盘的容量,再统一求和:

- name: Collect capacities of 300GB drives for RAID1
  set_fact:
    r1_drive_capacities: "{{ r1_drive_capacities | default([]) + [item] }}"
  loop: "{{ physical_drives_int }}"
  when: item == 300

- name: Calculate total RAID1 capacity
  set_fact:
    total_capacity_R1: "{{ r1_drive_capacities | sum }}"

说明:

  • 第一个Loop收集所有符合条件的容量值到列表中
  • 第二个任务通过sum对列表求和,得到整数类型的总容量

方法3:在模块调用时强制类型转换

若无法修改容量计算逻辑,可在调用iLO模块时,通过YAML类型标记强制转换为整数:

- name: Create logical drives with particular physical drives when username and password are defined
  block:
    - hpe.ilo.ilo_storage:
        category: Systems
        command: CreateLogicalDrivesWithParticularPhysicalDrives
        baseuri: "{{ baseuri }}"
        username: "{{ username }}"
        password: "{{ password }}"
        raid_details:
          - LogicalDriveName: "LD1"
            Raid: "Raid1"
            CapacityGB: !int "{{ total_capacity_R1 }}"
            DataDrives: "{{ datadrive_locations_raid1 }}"

说明:!int是YAML的类型强制转换标记,可直接将字符串内容转为整数。

验证变量类型

可通过以下任务确认变量类型是否正确:

- name: Verify total_capacity_R1 type
  debug:
    msg: "Variable type: {{ total_capacity_R1 | type_debug }}, Value: {{ total_capacity_R1 }}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 23:31:09