#!/usr/bin/env bash # Collects hardware + network inventory from all planck nodes. # Usage: ./scripts/inventory.sh > docs/INVENTORY.md set -u FIRST=1 NODES="${NODES:-20}" echo "# Planck Cluster Inventory" echo "" echo "Generated: $(date -Is)" echo "" echo "| Node | Model | RAM | SSD | IP | CPU Serial | Bootloader | Uptime | Temp |" echo "|------|-------|-----|-----|----|-----------|------------|--------|------|" for i in $(seq -w 1 "$NODES"); do host="planck0${i}.local" info=$(ssh -o BatchMode=yes -o ConnectTimeout=5 "adamcarr@${host}" ' model=$(tr -d "\0" < /proc/device-tree/model) ram=$(awk "/MemTotal/ {printf \"%.0fGB\", \$2/1024/1024}" /proc/meminfo) ssd=$(lsblk -dn -o SIZE,MODEL /dev/sda 2>/dev/null | tr -s " " | tr " " "/") ip=$(ip -4 -o addr show eth0 | awk "{print \$4}" | cut -d/ -f1) serial=$(grep -m1 Serial /proc/cpuinfo | awk "{print \$3}") bl=$(vcgencmd bootloader_version 2>/dev/null | head -1) up=$(uptime -p) temp=$(vcgencmd measure_temp 2>/dev/null || cat /sys/class/thermal/thermal_zone0/temp) echo "${model}|${ram}|${ssd}|${ip}|${serial}|${bl}|${up}|${temp}" ' 2>/dev/null) if [ -z "$info" ]; then echo "| planck0${i} | UNREACHABLE | | | | | | |" else IFS='|' read -r model ram ssd ip serial bl up temp <<< "$info" sep=$FIRST && FIRST=0 echo "| planck0${i} | ${model} | ${ram} | ${ssd} | ${ip} | ${serial} | ${bl} | ${up} | ${temp} |" fi done