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

Ansible playbook中如何将volumes变量的volume_size字节值转换为GB单位

Ansible字节单位容量转换为GB单位方案
  • 存储单位换算规则:1 GiB(业务场景通常默认表述为GB)= 1024 * 1024 * 1024 = 1073741824 字节,刚好匹配你提供的样例数值基准单位
  • 原volume_size字段为字符串类型,转换前需要先转为整数类型

方式1:单次输出时直接转换

适合临时输出容量信息的场景,直接在Jinja2表达式中完成转换即可,示例playbook代码如下:

- name: 输出单个集群所有卷的GB容量
  ansible.builtin.debug:
    msg: "卷ID: {{ item.id }}, 容量: {{ (item.volume_size | int / 1073741824) | int }}GB"
  loop: "{{ volumes['cluster1.demo.netapp.com'] }}"

如果需要保留小数,修改转换表达式即可,比如保留2位小数的写法为:
{{ (item.volume_size | int / 1073741824) | round(2) }}GB

方式2:批量处理所有卷新增GB容量字段

需要后续多次使用GB容量值时,可一次性批量处理生成新的带GB单位字段的变量,示例代码如下:

- name: 批量生成带GB容量字段的卷列表
  ansible.builtin.set_fact:
    volumes_with_gb: >-
      {% set processed = {} %}
      {% for cluster_name, vols in volumes.items() %}
      {% set _ = processed.update({cluster_name: []}) %}
      {% for vol in vols %}
        {% set _ = vol.update({
            'volume_size_gb': (vol.volume_size | int / 1073741824) | int
        }) %}
        {% set _ = processed[cluster_name].append(vol) %}
      {% endfor %}
      {% endfor %}
      {{ processed }}

处理完成后,可直接通过volumes_with_gb[集群名][卷下标].volume_size_gb获取对应卷的GB容量值,你提供的样例数据处理后,cluster1_vol1的volume_size_gb值为1,silas_vol的volume_size_gb值为10,完全匹配实际容量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 01:06:08