#!/usr/bin/env bash # Audit IP conflicts across all Proxmox hosts # Outputs: vmid|ip|host HOSTS="${PROXMOX_HOST_ML110:-192.168.11.10} ${PROXMOX_HOST_R630_01:-192.168.11.11} ${PROXMOX_HOST_R630_02:-192.168.11.12}" TMPF=$(mktemp) trap "rm -f $TMPF" EXIT for host in $HOSTS; do ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@$host " for vmid in \$(pct list 2>/dev/null | awk 'NR>1{print \$1}'); do pct config \$vmid 2>/dev/null | grep -oE 'ip=[0-9.]+/[0-9]+' | sed 's|ip=||;s|/.*||' | while read ip; do echo \"\$vmid|\$ip|$host\" done done " 2>/dev/null >> "$TMPF" done echo "=== All VMID|IP|Host ===" sort -t'|' -k2,2 "$TMPF" echo "" echo "=== Duplicate IPs (conflicts) ===" awk -F'|' '{ips[$2]=ips[$2] ? ips[$2] " + " $1"@"$3 : $1"@"$3; count[$2]++} END {for (ip in count) if (count[ip]>1) print ip " -> " ips[ip]}' "$TMPF" | sort -V || echo "None found" echo "" echo "=== Invalid IPs (.0 or .255) ===" awk -F'|' '{ split($2,a,"."); if (a[4]=="0" || a[4]=="255") print $1, $2, $3 }' "$TMPF" || echo "None found"