Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- Config, docs, scripts, and backup manifests - Submodule refs unchanged (m = modified content in submodules) Made-with: Cursor
171 lines
7.1 KiB
Bash
Executable File
171 lines
7.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Generate comprehensive Proxmox inventory report
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true
|
|
|
|
PROXMOX_HOST_ML110="${PROXMOX_HOST_ML110:-192.168.11.10}"
|
|
PROXMOX_HOST_R630_01="${PROXMOX_HOST_R630_01:-192.168.11.11}"
|
|
PROXMOX_HOST_R630_02="${PROXMOX_HOST_R630_02:-192.168.11.12}"
|
|
|
|
SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=5"
|
|
|
|
OUTPUT_FILE="${PROJECT_ROOT}/reports/comprehensive-proxmox-inventory-$(date +%Y%m%d_%H%M%S).md"
|
|
mkdir -p "$(dirname "$OUTPUT_FILE")"
|
|
|
|
{
|
|
echo "# Comprehensive Proxmox Inventory Report"
|
|
echo ""
|
|
echo "**Generated:** $(date)"
|
|
echo ""
|
|
echo "---"
|
|
echo ""
|
|
echo "## Proxmox Hosts"
|
|
echo ""
|
|
echo "| Hostname | IP Address | Status |"
|
|
echo "|----------|------------|--------|"
|
|
|
|
for host_info in "ml110:$PROXMOX_HOST_ML110" "r630-01:$PROXMOX_HOST_R630_01" "r630-02:$PROXMOX_HOST_R630_02"; do
|
|
IFS=: read -r hostname host_ip <<< "$host_info"
|
|
if ping -c 1 -W 2 "$host_ip" >/dev/null 2>&1; then
|
|
status="✅ Online"
|
|
else
|
|
status="❌ Offline"
|
|
fi
|
|
echo "| $hostname | $host_ip | $status |"
|
|
done
|
|
|
|
echo ""
|
|
echo "---"
|
|
echo ""
|
|
echo "## All VMIDs - Complete Inventory"
|
|
echo ""
|
|
echo "| VMID | Type | Name | Host | IP Address | FQDN | Status | Ports |"
|
|
echo "|------|------|------|------|------------|------|--------|-------|"
|
|
|
|
# Process each host
|
|
for host_info in "ml110:$PROXMOX_HOST_ML110" "r630-01:$PROXMOX_HOST_R630_01" "r630-02:$PROXMOX_HOST_R630_02"; do
|
|
IFS=: read -r hostname host_ip <<< "$host_info"
|
|
|
|
# Get all containers
|
|
containers=$(ssh $SSH_OPTS root@"$host_ip" "pct list 2>/dev/null | tail -n +2" 2>/dev/null || true)
|
|
|
|
while IFS= read -r line; do
|
|
[ -z "$line" ] && continue
|
|
vmid=$(echo "$line" | awk '{print $1}')
|
|
status=$(echo "$line" | awk '{print $2}')
|
|
name=$(echo "$line" | awk '{for(i=3;i<=NF;i++) printf "%s ", $i; print ""}' | sed 's/ $//')
|
|
|
|
# Get IP and hostname
|
|
ip=$(ssh $SSH_OPTS root@"$host_ip" "pct config $vmid 2>/dev/null | grep -oP 'ip=\K[^/]+' | head -1" 2>/dev/null || echo "N/A")
|
|
if [ "$ip" = "dhcp" ] || [ "$ip" = "auto" ] || [ -z "$ip" ]; then
|
|
if [ "$status" = "running" ]; then
|
|
ip=$(ssh $SSH_OPTS root@"$host_ip" "pct exec $vmid -- hostname -I 2>/dev/null | awk '{print \$1}'" 2>/dev/null || echo "N/A")
|
|
fi
|
|
fi
|
|
fqdn=$(ssh $SSH_OPTS root@"$host_ip" "pct config $vmid 2>/dev/null | grep '^hostname:' | cut -d: -f2 | tr -d ' '" 2>/dev/null || echo "N/A")
|
|
|
|
# Identify ports based on service name
|
|
ports="N/A"
|
|
if echo "$name" | grep -qi "rpc\|besu"; then
|
|
ports="8545,8546,30303,9545"
|
|
elif echo "$name" | grep -qi "postgres"; then
|
|
ports="5432"
|
|
elif echo "$name" | grep -qi "redis"; then
|
|
ports="6379"
|
|
elif echo "$name" | grep -qi "vault"; then
|
|
ports="8200"
|
|
elif echo "$name" | grep -qi "web3signer"; then
|
|
ports="9000"
|
|
elif echo "$name" | grep -qi "nginx\|npm"; then
|
|
ports="80,81,443"
|
|
elif echo "$name" | grep -qi "blockscout\|explorer"; then
|
|
ports="80,4000"
|
|
elif echo "$name" | grep -qi "api" && ! echo "$name" | grep -qi "3000"; then
|
|
ports="3000"
|
|
elif echo "$name" | grep -qi "frontend\|web"; then
|
|
ports="80"
|
|
fi
|
|
|
|
echo "| $vmid | LXC | $name | $hostname | $ip | $fqdn | $status | $ports |"
|
|
done <<< "$containers"
|
|
done
|
|
|
|
echo ""
|
|
echo "---"
|
|
echo ""
|
|
echo "## NPMplus Instances"
|
|
echo ""
|
|
|
|
npmplus_found=false
|
|
for host_info in "ml110:$PROXMOX_HOST_ML110" "r630-01:$PROXMOX_HOST_R630_01" "r630-02:$PROXMOX_HOST_R630_02"; do
|
|
IFS=: read -r hostname host_ip <<< "$host_info"
|
|
|
|
containers=$(ssh $SSH_OPTS root@"$host_ip" "pct list 2>/dev/null | tail -n +2" 2>/dev/null || true)
|
|
|
|
while IFS= read -r line; do
|
|
[ -z "$line" ] && continue
|
|
vmid=$(echo "$line" | awk '{print $1}')
|
|
name=$(echo "$line" | awk '{for(i=3;i<=NF;i++) printf "%s ", $i; print ""}' | sed 's/ $//')
|
|
|
|
if echo "$name" | grep -qi "npmplus"; then
|
|
npmplus_found=true
|
|
status=$(echo "$line" | awk '{print $2}')
|
|
ip=$(ssh $SSH_OPTS root@"$host_ip" "pct config $vmid 2>/dev/null | grep -oP 'ip=\K[^/]+' | head -1" 2>/dev/null || echo "N/A")
|
|
fqdn=$(ssh $SSH_OPTS root@"$host_ip" "pct config $vmid 2>/dev/null | grep '^hostname:' | cut -d: -f2 | tr -d ' '" 2>/dev/null || echo "N/A")
|
|
|
|
echo "### VMID $vmid: $name"
|
|
echo ""
|
|
echo "- **Host:** $hostname ($host_ip)"
|
|
echo "- **IP Address:** $ip"
|
|
echo "- **FQDN:** $fqdn"
|
|
echo "- **Status:** $status"
|
|
echo "- **Ports:** 80, 81, 443"
|
|
echo ""
|
|
|
|
# Get NPMplus configuration if running
|
|
if [ "$status" = "running" ] && [ -f "$SCRIPT_DIR/get-npmplus-mappings.py" ]; then
|
|
echo "#### NPMplus Configuration"
|
|
echo ""
|
|
echo "Attempting to retrieve configuration..."
|
|
echo ""
|
|
# Note: This would require .env file with credentials
|
|
fi
|
|
fi
|
|
done <<< "$containers"
|
|
done
|
|
|
|
if [ "$npmplus_found" = false ]; then
|
|
echo "No NPMplus instances found in running containers."
|
|
echo ""
|
|
echo "**Note:** NPMplus may be running on VMID 10233. Checking..."
|
|
echo ""
|
|
|
|
# Check specifically for 10233
|
|
for host_info in "ml110:$PROXMOX_HOST_ML110" "r630-01:$PROXMOX_HOST_R630_01" "r630-02:$PROXMOX_HOST_R630_02"; do
|
|
IFS=: read -r hostname host_ip <<< "$host_info"
|
|
if ssh $SSH_OPTS root@"$host_ip" "pct list | grep -q '^10233'" 2>/dev/null; then
|
|
echo "✅ Found VMID 10233 on $hostname"
|
|
info=$(ssh $SSH_OPTS root@"$host_ip" "pct list | grep '^10233'" 2>/dev/null)
|
|
echo " $info"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
echo ""
|
|
echo "---"
|
|
echo ""
|
|
echo "## Summary"
|
|
echo ""
|
|
echo "- **Total Proxmox Hosts:** 3"
|
|
echo "- **Total VMIDs:** $(ssh $SSH_OPTS root@"$PROXMOX_HOST_ML110" "pct list 2>/dev/null | tail -n +2 | wc -l" 2>/dev/null || echo 0) + $(ssh $SSH_OPTS root@"$PROXMOX_HOST_R630_01" "pct list 2>/dev/null | tail -n +2 | wc -l" 2>/dev/null || echo 0) + $(ssh $SSH_OPTS root@"$PROXMOX_HOST_R630_02" "pct list 2>/dev/null | tail -n +2 | wc -l" 2>/dev/null || echo 0)"
|
|
echo ""
|
|
|
|
} > "$OUTPUT_FILE"
|
|
|
|
echo "Report generated: $OUTPUT_FILE"
|
|
cat "$OUTPUT_FILE"
|