2025-12-04 09:04:42 -05:00

84 lines
2.9 KiB
YAML

---
- name: Health check on target host
hosts: all
become: false
gather_facts: false
vars:
category: monitoring
subcategory: health
tasks:
- name: Check if host is reachable (ping)
ansible.builtin.ping:
register: ping_result
- name: Gather minimal facts
ansible.builtin.setup:
gather_subset:
- '!all'
- '!min'
- distribution
ignore_errors: true
register: facts_result
- name: Get system uptime
ansible.builtin.command: uptime
register: uptime_result
changed_when: false
ignore_errors: true
- name: Get disk usage
ansible.builtin.shell: df -h / | tail -1 | awk '{print $5}'
register: disk_usage
changed_when: false
ignore_errors: true
- name: Get memory usage (Linux)
ansible.builtin.shell: |
if command -v free >/dev/null 2>&1; then
free -m | grep Mem | awk '{printf "%.1f%%", $3/$2 * 100}'
else
# Fallback for systems without free command
cat /proc/meminfo | awk '/MemTotal/{total=$2} /MemAvailable/{avail=$2} END{printf "%.1f%%", (total-avail)/total*100}'
fi
register: memory_usage
changed_when: false
ignore_errors: true
- name: Get CPU temperature (ARM/SBC)
ansible.builtin.shell: |
if [ -f /sys/class/thermal/thermal_zone0/temp ]; then
temp=$(cat /sys/class/thermal/thermal_zone0/temp)
# Use awk instead of bc for better compatibility
echo "${temp}" | awk '{printf "%.1f°C", $1/1000}'
else
echo "N/A"
fi
register: cpu_temp
changed_when: false
ignore_errors: true
- name: Get CPU load
ansible.builtin.shell: |
if [ -f /proc/loadavg ]; then
cat /proc/loadavg | awk '{print $1}'
else
uptime | awk -F'load average:' '{print $2}' | awk -F',' '{print $1}' | tr -d ' '
fi
register: cpu_load
changed_when: false
ignore_errors: true
- name: Display health status
ansible.builtin.debug:
msg: |
═══════════════════════════════════════
Host: {{ inventory_hostname }}
Status: {{ 'OK' if ping_result is success else 'UNREACHABLE' }}
═══════════════════════════════════════
Uptime: {{ uptime_result.stdout | default('N/A') }}
Disk Usage: {{ disk_usage.stdout | default('N/A') }}
Memory Usage: {{ memory_usage.stdout | default('N/A') }}
CPU Load: {{ cpu_load.stdout | default('N/A') }}
CPU Temp: {{ cpu_temp.stdout | default('N/A') }}
═══════════════════════════════════════