--- - 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') }} ═══════════════════════════════════════