63 lines
2.2 KiB
YAML
63 lines
2.2 KiB
YAML
---
|
|
- name: Check Host Availability
|
|
hosts: all
|
|
gather_facts: false
|
|
ignore_unreachable: true
|
|
|
|
tasks:
|
|
- name: Ping hosts to check availability
|
|
ansible.builtin.ping:
|
|
register: ping_result
|
|
ignore_errors: true
|
|
ignore_unreachable: true
|
|
|
|
- name: Add reachable hosts to group
|
|
ansible.builtin.group_by:
|
|
key: reachable_hosts
|
|
when: ping_result is succeeded
|
|
|
|
- name: Report offline hosts
|
|
ansible.builtin.debug:
|
|
msg: "{{ inventory_hostname }} - OFFLINE"
|
|
when: ping_result is not succeeded
|
|
delegate_to: localhost
|
|
|
|
- name: Disk and RAM Usage Report
|
|
hosts: reachable_hosts
|
|
become: true
|
|
gather_facts: true
|
|
|
|
tasks:
|
|
- name: Get disk usage (excluding snap, overlay, tmpfs)
|
|
ansible.builtin.shell: df -h --output=target,size,used,avail,pcent -x tmpfs -x devtmpfs -x squashfs -x overlay | tail -n +2
|
|
register: disk_usage
|
|
changed_when: false
|
|
|
|
- name: Calculate memory usage
|
|
ansible.builtin.set_fact:
|
|
mem_total_mb: "{{ ansible_memtotal_mb }}"
|
|
mem_used_mb: "{{ ansible_memory_mb.real.used }}"
|
|
mem_pct: "{{ ((ansible_memory_mb.real.used / ansible_memtotal_mb) * 100) | round(1) }}"
|
|
swap_total_mb: "{{ ansible_swaptotal_mb }}"
|
|
swap_used_mb: "{{ ansible_swaptotal_mb - ansible_swapfree_mb }}"
|
|
|
|
- name: Print report
|
|
ansible.builtin.debug:
|
|
msg: |
|
|
======================================================
|
|
HOST: {{ inventory_hostname }} ({{ ansible_host }})
|
|
OS: {{ ansible_distribution }} {{ ansible_distribution_version }}
|
|
======================================================
|
|
RAM: {{ mem_used_mb }}MB / {{ mem_total_mb }}MB ({{ mem_pct }}%)
|
|
SWAP: {{ swap_used_mb }}MB / {{ swap_total_mb }}MB
|
|
------------------------------------------------------
|
|
DISK:
|
|
{{ disk_usage.stdout }}
|
|
======================================================
|
|
|
|
- name: Warn on high disk usage (>85%)
|
|
ansible.builtin.debug:
|
|
msg: "WARNING: {{ item.split()[-1] }} usage on {{ item.split()[0] }} of {{ inventory_hostname }}"
|
|
loop: "{{ disk_usage.stdout_lines }}"
|
|
when: (item.split()[-1] | replace('%','') | int) > 85
|