37 lines
1.4 KiB
Bash
Executable File
37 lines
1.4 KiB
Bash
Executable File
#!/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
|