--- # Disk information gathering tasks - name: Gather disk usage information shell: df -h | grep -vE '^Filesystem|tmpfs|cdrom' register: system_info_disk_usage_raw changed_when: false failed_when: false tags: [gather, disk] - name: Gather disk usage in machine-readable format shell: df -B1 | grep -vE '^Filesystem|tmpfs|cdrom' register: system_info_disk_usage_bytes_raw changed_when: false failed_when: false tags: [gather, disk] - name: List block devices shell: lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE,MODEL,SERIAL register: system_info_lsblk_raw changed_when: false tags: [gather, disk] - name: Gather detailed block device information shell: lsblk -J -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE,UUID,PARTUUID,MODEL,SERIAL,STATE,ROTA register: system_info_lsblk_json_raw changed_when: false tags: [gather, disk] - name: Check for LVM usage shell: | if command -v pvs &> /dev/null; then echo "=== Physical Volumes ===" pvs echo "=== Volume Groups ===" vgs echo "=== Logical Volumes ===" lvs else echo "LVM not configured or not available" fi register: system_info_lvm_raw changed_when: false become: true failed_when: false tags: [gather, disk] - name: Detect if LVM is in use set_fact: system_info_lvm_detected: "{{ 'Physical Volumes' in system_info_lvm_raw.stdout }}" tags: [gather, disk] - name: Gather mount points information shell: mount | grep -vE "tmpfs|devtmpfs|sysfs|proc|cgroup" register: system_info_mounts_raw changed_when: false failed_when: false tags: [gather, disk] - name: Check for RAID arrays shell: | if [ -f /proc/mdstat ]; then cat /proc/mdstat else echo "No software RAID detected" fi register: system_info_mdstat_raw changed_when: false tags: [gather, disk] - name: Detect hardware RAID controllers shell: lspci | grep -iE "raid|storage controller" || echo "No hardware RAID controllers detected" register: system_info_hw_raid_raw changed_when: false tags: [gather, disk] - name: Gather disk I/O statistics shell: iostat -x 1 2 | tail -n +4 register: system_info_iostat_raw changed_when: false failed_when: false tags: [gather, disk] - name: List physical disks shell: lsblk -d -o NAME,SIZE,TYPE,ROTA,MODEL | grep disk register: system_info_physical_disks_raw changed_when: false tags: [gather, disk] - name: Check for SSD vs HDD shell: | for disk in $(lsblk -d -n -o NAME,TYPE | grep disk | awk '{print $1}'); do rota=$(cat /sys/block/$disk/queue/rotational 2>/dev/null || echo "unknown") if [ "$rota" = "0" ]; then echo "$disk: SSD" elif [ "$rota" = "1" ]; then echo "$disk: HDD" else echo "$disk: Unknown" fi done register: system_info_disk_types_raw changed_when: false failed_when: false tags: [gather, disk] - name: Gather SMART status (if available) shell: | if command -v smartctl &> /dev/null; then for disk in $(lsblk -d -n -o NAME,TYPE | grep disk | awk '{print $1}'); do echo "=== /dev/$disk ===" smartctl -H /dev/$disk 2>/dev/null || echo "SMART not available for /dev/$disk" done else echo "smartctl not available" fi register: system_info_smart_raw changed_when: false become: true failed_when: false tags: [gather, disk] - name: Aggregate disk information set_fact: system_info_disk: usage_human: "{{ system_info_disk_usage_raw.stdout_lines | default([]) }}" block_devices: "{{ system_info_lsblk_raw.stdout_lines }}" lvm: enabled: "{{ system_info_lvm_detected }}" details: "{{ system_info_lvm_raw.stdout_lines | default([]) }}" mounts: "{{ system_info_mounts_raw.stdout_lines | default([]) }}" raid: software: "{{ system_info_mdstat_raw.stdout_lines }}" hardware: "{{ system_info_hw_raid_raw.stdout_lines }}" physical_disks: "{{ system_info_physical_disks_raw.stdout_lines | default([]) }}" disk_types: "{{ system_info_disk_types_raw.stdout_lines | default([]) }}" smart_status: "{{ system_info_smart_raw.stdout_lines | default([]) }}" io_stats: "{{ system_info_iostat_raw.stdout_lines | default([]) }}" tags: [gather, disk]