84 lines
2.9 KiB
YAML
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') }}
|
|
═══════════════════════════════════════
|