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

