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

如何用Ansible检查Windows服务器磁盘大小并配置告警?

解决Windows服务器磁盘大小检查的Ansible条件判断问题

原代码存在的问题

  • 重复调用win_disk_facts,属于冗余操作
  • D盘检查的when条件逻辑完全错误:原条件是「当disks[1].size未定义时执行」,但实际需求是「D盘存在时才执行检查」,且when语句内无需用{{}}包裹变量
  • 直接通过索引disks[0]/disks[1]匹配C/D盘不可靠,磁盘顺序会因服务器配置不同变化,必须通过盘符精准匹配

修正后的完整Playbook

- name: Windows服务器磁盘大小检查
  hosts: '{{ servers }}'
  become: false
  gather_facts: false
  vars:
    # 定义磁盘规格阈值(单位:GB),可按需修改
    disk_specs:
      C: 50
      D: 100
  tasks:
    - name: 获取磁盘分区信息
      tags: disk
      community.windows.win_disk_facts:
        filter: partitions

    - name: 检查C盘大小是否达标
      ansible.builtin.fail:
        msg: "告警:C盘当前大小为{{ c_disk_size }}GB,低于阈值{{ disk_specs.C }}GB"
      vars:
        # 按盘符筛选C盘,转换大小为GB并取整
        c_disk: "{{ ansible_facts.disks | selectattr('drive_letter', 'equalto', 'C') | first }}"
        c_disk_size: "{{ (c_disk.size / 1024**3) | round | int }}"
      when: c_disk_size < disk_specs.C

    - name: 检查D盘大小(仅当D盘存在时执行)
      ansible.builtin.fail:
        msg: "告警:D盘当前大小为{{ d_disk_size }}GB,低于阈值{{ disk_specs.D }}GB"
      vars:
        # 筛选D盘,无D盘则返回空列表
        d_disk_list: "{{ ansible_facts.disks | selectattr('drive_letter', 'equalto', 'D') | list }}"
        d_disk: "{{ d_disk_list[0] if d_disk_list | length > 0 else None }}"
        d_disk_size: "{{ (d_disk.size / 1024**3) | round | int if d_disk else 0 }}"
      when:
        - d_disk is not none
        - d_disk_size < disk_specs.D

关键说明

  1. 精准匹配磁盘:通过selectattr('drive_letter', 'equalto', 'X')按盘符筛选磁盘,彻底避免索引顺序错误
  2. 告警触发逻辑:用fail模块替代debug,磁盘不达标时任务直接失败并输出告警信息,在Ansible运行过程中直观触发告警
  3. D盘存在性判断:先将筛选结果转为列表,通过列表长度判断D盘是否存在,避免访问不存在的变量引发报错
  4. 阈值可配置:把磁盘规格定义在vars区块,后续修改阈值只需调整disk_specs,无需改动任务逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:46:06