如何使用Ansible获取磁盘使用率超85%的服务器节点IP地址
磁盘使用率超标IP获取Ansible实现方案
你原来的shell命令存在语法错误,且无法直接在被控端收集全局超标IP,可通过Ansible内置变量+结果过滤实现需求,以下是两种可用方案:
方案1:执行后统一输出所有超标IP列表
该方案只会在playbook执行末尾输出一次所有符合条件的服务器IP,方便汇总查看:
--- - hosts: all gather_facts: yes vars: # 可自定义磁盘使用率阈值 disk_threshold: 85 tasks: - name: 采集根分区磁盘使用率 shell: df / | awk 'NR==2{print $5}' | sed 's/%//g' register: root_disk_usage changed_when: false - name: 过滤收集超标服务器IP set_fact: over_disk_limit_ips: "{{ hostvars | dict2items | selectattr('value.root_disk_usage.stdout', 'defined') | selectattr('value.root_disk_usage.stdout', 'int', 'gt', disk_threshold) | map(attribute='value.ansible_default_ipv4.address') | list }}" run_once: true - name: 打印超标服务器IP列表 debug: msg: "根分区使用率超过{{ disk_threshold }}%的服务器IP:{{ over_disk_limit_ips }}" run_once: true
方案2:每个超标主机单独输出自身IP
如果不需要统一汇总,只想让符合条件的主机各自输出IP,可使用简化版本:
--- - hosts: all gather_facts: yes vars: disk_threshold: 85 tasks: - name: 采集根分区磁盘使用率 shell: df / | awk 'NR==2{print $5}' | sed 's/%//g' register: root_disk_usage changed_when: false - name: 打印当前超标主机IP debug: msg: "超标服务器IP:{{ ansible_default_ipv4.address }},当前根分区使用率:{{ root_disk_usage.stdout }}%" when: root_disk_usage.stdout | int > disk_threshold
说明
- 无需使用
df -h,纯数字输出的df结果更方便做数值比较,避免单位转换问题 gather_facts: yes开启后可直接调用Ansible内置的ansible_default_ipv4.address变量获取被控端的IP地址,无需手动在shell中拼接changed_when: false用于屏蔽采集类任务的变更状态标记,不影响playbook的变更统计结果
内容的提问来源于stack exchange,提问作者Somethingwhatever
相关产品推荐
相关产品推荐

