Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands - CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround - CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check - NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere - MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates - LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference Co-authored-by: Cursor <cursoragent@cursor.com>
164 lines
5.6 KiB
Bash
Executable File
164 lines
5.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Fix VMIDs using reserved IP range (${PROXMOX_HOST_ML110:-192.168.11.10}-192.168.11.25)
|
|
# Changes IPs to available addresses outside the reserved range
|
|
# Usage: ./scripts/fix-reserved-ip-conflicts.sh
|
|
|
|
set -euo pipefail
|
|
|
|
# Load IP configuration
|
|
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
|
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
# Reserved IP range for physical servers
|
|
RESERVED_START=10
|
|
RESERVED_END=25
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
|
|
echo ""
|
|
log_info "═══════════════════════════════════════════════════════════"
|
|
log_info " FIXING RESERVED IP CONFLICTS"
|
|
log_info " Reserved Range: ${PROXMOX_HOST_ML110:-192.168.11.10} - 192.168.11.25"
|
|
log_info "═══════════════════════════════════════════════════════════"
|
|
echo ""
|
|
|
|
# VMIDs that need IP changes
|
|
# Format: node:vmid:hostname:current_ip:new_ip
|
|
declare -a FIXES=(
|
|
"r630-02:105:nginxproxymanager:${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-192.168.11.21}}}}:${IP_NGINX_LEGACY:-192.168.11.26}"
|
|
"r630-02:130:monitoring-1:192.168.11.22:192.168.11.27"
|
|
)
|
|
|
|
# Node IPs
|
|
declare -A NODE_IPS=(
|
|
["ml110"]="${PROXMOX_HOST_ML110}"
|
|
["r630-01"]="${PROXMOX_HOST_R630_01}"
|
|
["r630-02"]="${PROXMOX_HOST_R630_02}"
|
|
)
|
|
|
|
# Node passwords
|
|
declare -A NODE_PASSWORDS=(
|
|
["ml110"]="L@kers2010"
|
|
["r630-01"]="password"
|
|
["r630-02"]="password"
|
|
)
|
|
|
|
log_info "Found ${#FIXES[@]} VMID(s) to fix:"
|
|
echo ""
|
|
|
|
for fix in "${FIXES[@]}"; do
|
|
IFS=':' read -r node vmid hostname current_ip new_ip <<< "$fix"
|
|
log_info " VMID $vmid ($hostname) on $node: $current_ip → $new_ip"
|
|
done
|
|
|
|
echo ""
|
|
read -p "Continue with IP changes? (y/N): " -n 1 -r
|
|
echo ""
|
|
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
log_info "Cancelled"
|
|
exit 0
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Apply fixes
|
|
for fix in "${FIXES[@]}"; do
|
|
IFS=':' read -r node vmid hostname current_ip new_ip <<< "$fix"
|
|
node_ip="${NODE_IPS[$node]}"
|
|
|
|
log_info "Fixing VMID $vmid ($hostname) on $node..."
|
|
|
|
# Get current network configuration
|
|
current_config=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${node_ip} \
|
|
"pct config $vmid 2>/dev/null | grep '^net0:'" || echo "")
|
|
|
|
if [[ -z "$current_config" ]]; then
|
|
log_error " Cannot read configuration for VMID $vmid"
|
|
continue
|
|
fi
|
|
|
|
# Extract MAC address and other settings
|
|
mac=$(echo "$current_config" | grep -oP 'hwaddr=\K[^,]+' || echo "")
|
|
bridge=$(echo "$current_config" | grep -oP 'bridge=\K[^,]+' || echo "vmbr0")
|
|
gw=$(echo "$current_config" | grep -oP 'gw=\K[^,]+' || echo "${NETWORK_GATEWAY:-192.168.11.1}")
|
|
type=$(echo "$current_config" | grep -oP 'type=\K[^,]+' || echo "veth")
|
|
|
|
if [[ -z "$mac" ]]; then
|
|
log_error " Cannot extract MAC address"
|
|
continue
|
|
fi
|
|
|
|
# Stop container
|
|
log_info " Stopping container..."
|
|
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${node_ip} \
|
|
"pct stop $vmid 2>/dev/null || true"
|
|
sleep 2
|
|
|
|
# Change IP address
|
|
log_info " Changing IP from $current_ip to $new_ip..."
|
|
new_net_config="name=eth0,bridge=${bridge},gw=${gw},ip=${new_ip}/24,hwaddr=${mac},type=${type}"
|
|
|
|
if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${node_ip} \
|
|
"pct set $vmid -net0 \"$new_net_config\"" 2>&1; then
|
|
log_success " IP address changed successfully"
|
|
else
|
|
log_error " Failed to change IP address"
|
|
continue
|
|
fi
|
|
|
|
# Start container
|
|
log_info " Starting container..."
|
|
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${node_ip} \
|
|
"pct start $vmid" || {
|
|
log_warn " Container may need manual start"
|
|
}
|
|
|
|
sleep 3
|
|
|
|
# Verify new IP
|
|
log_info " Verifying new IP..."
|
|
new_ip_check=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${node_ip} \
|
|
"pct config $vmid 2>/dev/null | grep -oP 'ip=\\K[^,]+' | head -1" || echo "")
|
|
|
|
if [[ "$new_ip_check" == "${new_ip}/24" ]]; then
|
|
log_success " ✅ Verified: IP is now $new_ip"
|
|
else
|
|
log_warn " ⚠️ IP verification: Expected ${new_ip}/24, got $new_ip_check"
|
|
fi
|
|
|
|
echo ""
|
|
done
|
|
|
|
log_success "═══════════════════════════════════════════════════════════"
|
|
log_success " IP CONFLICTS FIXED"
|
|
log_success "═══════════════════════════════════════════════════════════"
|
|
echo ""
|
|
log_info "Summary of changes:"
|
|
for fix in "${FIXES[@]}"; do
|
|
IFS=':' read -r node vmid hostname current_ip new_ip <<< "$fix"
|
|
log_info " ✅ VMID $vmid ($hostname): $current_ip → $new_ip"
|
|
done
|
|
echo ""
|
|
log_info "Next steps:"
|
|
log_info " 1. Update any configuration files that reference the old IPs"
|
|
log_info " 2. Update DNS records if needed"
|
|
log_info " 3. Update firewall rules if needed"
|
|
log_info " 4. Test services to ensure they work with new IPs"
|
|
echo ""
|