--- - 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 ansible.builtin.shell: df -h --output=target,size,used,avail,pcent -x tmpfs -x devtmpfs | tail -n +2 register: disk_usage changed_when: false - name: Calculate memory percentage ansible.builtin.set_fact: mem_total_mb: "{{ ansible_memtotal_mb }}" mem_used_mb: "{{ ansible_memtotal_mb - ansible_memfree_mb - (ansible_memory_mb.nocache.free | default(0)) }}" mem_pct: "{{ (((ansible_memtotal_mb - ansible_memfree_mb) / 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 USAGE: {{ 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