#!/bin/bash source ~/.bashrc # Verify and Fix VM IP Addresses # Checks if VM IPs are in correct subnet and updates if needed set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" # Load environment variables if [ -f "$PROJECT_ROOT/.env" ]; then set -a source <(grep -v '^#' "$PROJECT_ROOT/.env" | grep -v '^$' | sed 's/#.*$//' | grep '=') set +a fi # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } PVE_USERNAME="${PVE_USERNAME:-root@pam}" PVE_PASSWORD="${PVE_ROOT_PASS:-}" PROXMOX_URL="${PROXMOX_ML110_URL:-https://192.168.1.206:8006}" PROXMOX_NODE="${PROXMOX_NODE:-pve}" get_api_token() { local response=$(curl -s -k --connect-timeout 10 --max-time 15 \ -d "username=$PVE_USERNAME&password=$PVE_PASSWORD" \ "$PROXMOX_URL/api2/json/access/ticket" 2>&1) if echo "$response" | grep -q '"data"'; then local ticket=$(echo "$response" | grep -o '"ticket":"[^"]*' | cut -d'"' -f4) local csrf_token=$(echo "$response" | grep -o '"CSRFPreventionToken":"[^"]*' | cut -d'"' -f4) echo "$ticket|$csrf_token" else echo "" fi } verify_network() { log_info "Verifying Network Configuration" # Get Proxmox host IP from URL local proxmox_ip=$(echo "$PROXMOX_URL" | sed -E 's|https?://([^:]+).*|\1|') if [ -z "$proxmox_ip" ]; then log_error "Could not determine Proxmox host IP" return 1 fi log_info "Proxmox host IP: $proxmox_ip" # Extract subnet (assume /24) local subnet=$(echo "$proxmox_ip" | cut -d'.' -f1-3) log_info "Network subnet: $subnet.0/24" # VM IPs local vms=( "100 192.168.1.60 cloudflare-tunnel" "101 192.168.1.188 k3s-master" "102 192.168.1.121 git-server" "103 192.168.1.82 observability" ) log_info "Checking VM IP addresses..." local all_valid=true for vm_spec in "${vms[@]}"; do read -r vmid vm_ip name <<< "$vm_spec" local vm_subnet=$(echo "$vm_ip" | cut -d'.' -f1-3) if [ "$vm_subnet" = "$subnet" ]; then log_info "✓ VM $vmid ($name): $vm_ip - in correct subnet" else log_warn "✗ VM $vmid ($name): $vm_ip - subnet mismatch!" log_warn " Expected subnet: $subnet.0/24" log_warn " VM subnet: $vm_subnet.0/24" all_valid=false fi done if [ "$all_valid" = true ]; then log_info "✓ All VM IPs are in the correct subnet" log_warn "Note: Ensure these IPs are outside DHCP range" log_warn "Note: Gateway 192.168.1.254 must be correct for your network" return 0 else log_warn "Some VM IPs need adjustment" return 1 fi } main() { verify_network log_info "" log_info "Network Configuration Summary:" log_info " - Proxmox host: Uses DHCP (currently $PROXMOX_URL)" log_info " - VM IPs: Static (192.168.1.188/60/70/80)" log_info " - Gateway: 192.168.1.254" log_info "" log_warn "Important:" log_warn " 1. Ensure VM IPs are outside DHCP range" log_warn " 2. Verify gateway 192.168.1.254 is correct" log_warn " 3. If Proxmox host IP changes, update .env file" } main "$@"