#!/usr/bin/env bash set -euo pipefail # Output format: YAML for easy parsing echo "hostname: $(hostname)" echo "uptime: $(uptime -p)" echo "os: $(lsb_release -ds)" echo "kernel: $(uname -r)" echo "architecture: $(uname -m)" # CPU Info echo "cpu:" echo " model: $(lscpu | awk -F: '/Model name/ {print $2}' | xargs)" echo " cores: $(nproc)" echo " threads: $(lscpu | awk -F: '/^CPU\(s\)/ {print $2}' | xargs)" echo " frequency_ghz: $(lscpu | awk -F: '/MHz/ {printf \"%.2f\", $2 / 1000}' | xargs)" # Memory mem_total=$(free -g | awk '/^Mem:/ {print $2}') mem_free=$(free -g | awk '/^Mem:/ {print $4}') echo "memory_gb:" echo " total: ${mem_total}" echo " free: ${mem_free}" # Disk echo "disks:" lsblk -dno NAME,SIZE,MODEL | while read -r name size model; do echo " - device: /dev/$name" echo " size: \"$size\"" echo " model: \"$model\"" done echo "disk_usage:" df -h --output=source,size,used,avail,target -x tmpfs -x devtmpfs | tail -n +2 | while read -r src size used avail target; do echo " - mount: \"$target\"" echo " device: \"$src\"" echo " size: \"$size\"" echo " used: \"$used\"" echo " available: \"$avail\"" done # Networking echo "network_interfaces:" ip -o -4 addr show | awk '!/ lo / {print " - iface: \"" $2 "\"\n ip: \"" $4 "\"" }' # System ID for deduplication echo "machine_id: $(cat /etc/machine-id)"