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

如何使用Ansible Playbook检测Linux磁盘容量是否小于10GB

问题根因

你当前代码的判断逻辑错误来自两个原因:

  • ansible_facts.devices返回的size字段是带单位的字符串(例如55 MB、20 GB),直接和数字10做比较时,Ansible只会提取字符串开头的数字部分计算,55 MB会被识别为数值55,自然就会误判为大于10输出PASS
  • 原set_fact使用循环遍历磁盘时,每次都会覆盖disk_size变量,最终只能拿到最后一块磁盘的检测结果,无法实现所有磁盘的批量检测
修改方案

使用Ansible内置的human_to_bytes过滤器,将所有带单位的容量统一转换为字节数值,再和10GB对应的字节数(10737418240)做比较即可保证判断逻辑准确,同时输出时直接调用原始size字段就能保留原生单位。

完整修改后的Playbook片段
- name: 检测所有磁盘容量 筛选小于10GB的磁盘
  debug:
    msg: >
      {% set size_in_bytes = item.value.size | human_to_bytes %}
      {% if size_in_bytes > 10737418240 %}
        磁盘 {{ item.key }} 容量 {{ item.value.size }} -> PASS
      {% else %}
        磁盘 {{ item.key }} 容量 {{ item.value.size }} -> FAIL
      {% endif %}
  with_dict: "{{ ansible_facts['devices'] }}"
  ignore_errors: yes
  tags: get_disk_info
可选优化:仅输出小于10GB的磁盘

如果不需要输出PASS的磁盘,只想筛选出容量不足10GB的磁盘,可以添加when条件过滤:

- name: 仅输出容量小于10GB的磁盘
  debug:
    msg: "磁盘 {{ item.key }} 容量不足10GB,当前容量:{{ item.value.size }}"
  with_dict: "{{ ansible_facts['devices'] }}"
  when: item.value.size | human_to_bytes < 10737418240
  ignore_errors: yes
  tags: get_disk_info

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:06:05