Files
proxmox/scripts/scan-all-containers.sh.bak

103 lines
3.7 KiB
Bash
Raw Normal View History

#!/bin/bash
# Scan all containers across all Proxmox hosts
# Outputs: VMID, name, host, IP config, current IP, status
set -euo pipefail
HOSTS=(
"192.168.11.10:ml110"
"192.168.11.11:r630-01"
"192.168.11.12:r630-02"
)
OUTPUT_FILE="/home/intlc/projects/proxmox/CONTAINER_INVENTORY_$(date +%Y%m%d_%H%M%S).md"
CSV_FILE="/home/intlc/projects/proxmox/container_inventory_$(date +%Y%m%d_%H%M%S).csv"
TEMP_DIR=$(mktemp -d)
echo "=== Scanning All Containers Across All Hosts ==="
echo ""
# Create output files
cat > "$OUTPUT_FILE" << EOF
# Container Inventory - Complete Scan
**Generated**: $(date)
**Purpose**: Complete inventory of all containers across all Proxmox hosts
---
## All Containers
| VMID | Name | Host | Status | IP Config | Current IP | Hostname |
|------|------|------|--------|----------|------------|----------|
EOF
echo "VMID,Name,Host,Status,IP_Config,Current_IP,Hostname" > "$CSV_FILE"
for host_info in "${HOSTS[@]}"; do
IFS=: read -r ip hostname <<< "$host_info"
echo "Scanning $hostname ($ip)..."
# Get all VMIDs for this host
ssh -o ConnectTimeout=10 root@"$ip" "pct list 2>/dev/null | tail -n +2 | awk '{print \$1}'" > "$TEMP_DIR/${hostname}_vmids.txt" 2>/dev/null || continue
if [ ! -s "$TEMP_DIR/${hostname}_vmids.txt" ]; then
echo " No containers found on $hostname"
continue
fi
# Process each VMID
while read -r vmid; do
[ -z "$vmid" ] && continue
# Get container info in one SSH call
container_data=$(ssh -o ConnectTimeout=10 root@"$ip" "
name=\$(pct config $vmid 2>/dev/null | grep '^name:' | cut -d: -f2 | tr -d ' ' || echo 'unnamed')
hostname_vm=\$(pct config $vmid 2>/dev/null | grep '^hostname:' | cut -d: -f2 | tr -d ' ' || echo 'N/A')
status=\$(pct status $vmid 2>/dev/null | grep 'status:' | awk '{print \$2}' || echo 'unknown')
net_config=\$(pct config $vmid 2>/dev/null | grep '^net0:' || echo '')
ip_config='N/A'
current_ip='N/A'
if echo \"\$net_config\" | grep -q 'ip='; then
ip_config=\$(echo \"\$net_config\" | grep -oE 'ip=[^,]+' | cut -d= -f2)
if [ \"\$ip_config\" = 'dhcp' ] || [ \"\$ip_config\" = 'auto' ]; then
if [ \"\$status\" = 'running' ]; then
current_ip=\$(pct exec $vmid -- hostname -I 2>/dev/null | awk '{print \$1}' || echo 'N/A')
fi
else
current_ip=\$(echo \"\$ip_config\" | cut -d'/' -f1)
fi
fi
echo \"\$name|\$hostname_vm|\$status|\$ip_config|\$current_ip\"
" 2>/dev/null || echo "|||||")
IFS='|' read -r name hostname_vm status ip_config current_ip <<< "$container_data"
# Output to files
echo "| $vmid | $name | $hostname | $status | $ip_config | $current_ip | $hostname_vm |" >> "$OUTPUT_FILE"
echo "$vmid,\"$name\",$hostname,$status,$ip_config,$current_ip,$hostname_vm" >> "$CSV_FILE"
done < "$TEMP_DIR/${hostname}_vmids.txt"
done
# Calculate summary
dhcp_count=$(grep -c "| dhcp |" "$OUTPUT_FILE" || echo "0")
static_count=$(grep -v "| dhcp |" "$OUTPUT_FILE" | grep -v "| N/A |" | grep -c "| 192.168.11" || echo "0")
total_count=$(tail -n +12 "$OUTPUT_FILE" | grep -c "^|" || echo "0")
rm -rf "$TEMP_DIR"
echo ""
echo "=== Scan Complete ==="
echo "Total containers scanned: $total_count"
echo "Output files:"
echo " - $OUTPUT_FILE"
echo " - $CSV_FILE"
echo ""
# Summary by IP config type
echo "=== Summary by IP Configuration ==="
echo "DHCP containers: $dhcp_count"
echo "Static IP containers: $static_count"
echo "Total containers: $total_count"