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

如何在Ansible/Jinja2中为字典值应用过滤器转换磁盘大小为GB级易读格式(无需set_fact或FilterPlugin)

解决方案

你可以直接通过Jinja2的生成器表达式结合Ansible内置的human_readable过滤器,在单个模板表达式内完成字典转换和磁盘大小格式化,完全不需要set_fact或自定义FilterPlugin。

核心表达式如下:

{{ dict( (item.friendly_name, item.size | human_readable(unit='G')) for item in ansible_facts.disks ) }}

说明

  1. 遍历磁盘列表:直接循环ansible_facts.disks中的每一项,避免了json_query的中间转换,更直观也更灵活。
  2. 格式化磁盘大小:对每个磁盘的size字段应用human_readable(unit='G')过滤器,自动将原始数值转换为以GB为单位的人类可读格式。如果需要调整精度(比如去掉小数),可以添加precision参数:
    item.size | human_readable(unit='G', precision=0)
    
    如果想要更简洁的格式(比如1024G而非1024 GB),可以再叠加replace过滤器去掉空格:
    item.size | human_readable(unit='G', precision=0) | replace(' ', '')
    
  3. 生成目标字典:用生成器表达式产出(友好名称, 格式化后大小)的键值对,最后通过dict()函数直接转换为你需要的字典结构。

示例

假设你的ansible_facts.disks数据如下:

ansible_facts:
  disks:
    - friendly_name: 'disk1 name'
      size: 1099511627776  # 1TB = 1024GB
    - friendly_name: 'disk2 name'
      size: 8796093022208  # 8TB = 8192GB

使用带精度调整和空格去除的表达式:

{{ dict( (item.friendly_name, item.size | human_readable(unit='G', precision=0) | replace(' ', '')) for item in ansible_facts.disks ) }}

将输出你期望的格式:

{'disk1 name': '1024G', 'disk2 name': '8192G'}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 03:07:42