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
174 lines
4.8 KiB
Bash
Executable File
174 lines
4.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
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
|
|
|
|
|
|
# Change dev machine IP to ${IP_SERVICE_4:-${IP_SERVICE_4:-192.168.11.4}} using netplan
|
|
# Usage: sudo ./scripts/unifi/change-ip-to-vlan11-netplan.sh
|
|
|
|
set -e
|
|
|
|
INTERFACE="eth0"
|
|
NEW_IP="${IP_SERVICE_4:-${IP_SERVICE_4:-192.168.11.4}}"
|
|
NEW_GATEWAY="${NETWORK_GATEWAY:-192.168.11.1}"
|
|
NEW_DNS="${NETWORK_GATEWAY:-192.168.11.1}"
|
|
|
|
echo "🔧 Changing IP address to $NEW_IP for interface $INTERFACE using netplan"
|
|
echo ""
|
|
|
|
# Check if running as root
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo "❌ Please run as root (use sudo)"
|
|
exit 1
|
|
fi
|
|
|
|
# Find netplan config file
|
|
NETPLAN_FILE=$(ls /etc/netplan/*.yaml 2>/dev/null | head -1)
|
|
if [ -z "$NETPLAN_FILE" ]; then
|
|
echo "❌ No netplan config file found in /etc/netplan/"
|
|
exit 1
|
|
fi
|
|
|
|
echo "📋 Found netplan config: $NETPLAN_FILE"
|
|
echo ""
|
|
|
|
# Backup original config
|
|
BACKUP_FILE="${NETPLAN_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
|
|
cp "$NETPLAN_FILE" "$BACKUP_FILE"
|
|
echo "✅ Backup created: $BACKUP_FILE"
|
|
echo ""
|
|
|
|
# Read current config
|
|
CURRENT_CONFIG=$(cat "$NETPLAN_FILE")
|
|
|
|
# Check if interface exists in config
|
|
if ! echo "$CURRENT_CONFIG" | grep -q "$INTERFACE"; then
|
|
echo "⚠️ Interface $INTERFACE not found in config"
|
|
echo "Current config:"
|
|
cat "$NETPLAN_FILE"
|
|
echo ""
|
|
echo "Please manually edit $NETPLAN_FILE to add $INTERFACE configuration"
|
|
exit 1
|
|
fi
|
|
|
|
# Create new config (preserve structure, update IP settings)
|
|
echo "🔄 Updating netplan configuration..."
|
|
|
|
# Use Python to safely update YAML
|
|
python3 << EOF
|
|
import yaml
|
|
import sys
|
|
|
|
# Read current config
|
|
with open("$NETPLAN_FILE", 'r') as f:
|
|
config = yaml.safe_load(f)
|
|
|
|
# Update network configuration
|
|
if 'network' not in config:
|
|
config['network'] = {}
|
|
|
|
if 'ethernets' not in config['network']:
|
|
config['network']['ethernets'] = {}
|
|
|
|
if '$INTERFACE' not in config['network']['ethernets']:
|
|
config['network']['ethernets']['$INTERFACE'] = {}
|
|
|
|
# Update interface settings
|
|
config['network']['ethernets']['$INTERFACE']['addresses'] = ['$NEW_IP/24']
|
|
config['network']['ethernets']['$INTERFACE']['gateway4'] = '$NEW_GATEWAY'
|
|
config['network']['ethernets']['$INTERFACE']['nameservers'] = {
|
|
'addresses': ['$NEW_DNS', '8.8.8.8']
|
|
}
|
|
|
|
# Write updated config
|
|
with open("$NETPLAN_FILE", 'w') as f:
|
|
yaml.dump(config, f, default_flow_style=False, sort_keys=False)
|
|
|
|
print("✅ Configuration updated")
|
|
EOF
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ Failed to update config. Restoring backup..."
|
|
cp "$BACKUP_FILE" "$NETPLAN_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "📋 New configuration:"
|
|
cat "$NETPLAN_FILE"
|
|
echo ""
|
|
|
|
# Validate netplan config
|
|
echo "🔍 Validating netplan configuration..."
|
|
if netplan try --timeout 5 >/dev/null 2>&1; then
|
|
echo "✅ Configuration is valid"
|
|
echo ""
|
|
echo "🔄 Applying netplan configuration..."
|
|
netplan apply
|
|
echo "✅ Configuration applied"
|
|
else
|
|
echo "⚠️ Validation failed. Restoring backup..."
|
|
cp "$BACKUP_FILE" "$NETPLAN_FILE"
|
|
netplan apply
|
|
exit 1
|
|
fi
|
|
|
|
# Wait for network to stabilize
|
|
sleep 3
|
|
|
|
# Verify new IP
|
|
echo ""
|
|
echo "🔍 Verifying new IP configuration..."
|
|
NEW_IP_CHECK=$(ip addr show $INTERFACE 2>/dev/null | grep -oP 'inet \K[\d.]+' | head -1)
|
|
if [ "$NEW_IP_CHECK" = "$NEW_IP" ]; then
|
|
echo "✅ IP address successfully changed to $NEW_IP"
|
|
else
|
|
echo "⚠️ IP address check: $NEW_IP_CHECK (expected $NEW_IP)"
|
|
echo " This may take a few more seconds..."
|
|
sleep 5
|
|
NEW_IP_CHECK=$(ip addr show $INTERFACE 2>/dev/null | grep -oP 'inet \K[\d.]+' | head -1)
|
|
if [ "$NEW_IP_CHECK" = "$NEW_IP" ]; then
|
|
echo "✅ IP address is now $NEW_IP"
|
|
else
|
|
echo "⚠️ IP address is $NEW_IP_CHECK (expected $NEW_IP)"
|
|
fi
|
|
fi
|
|
|
|
# Test gateway
|
|
echo ""
|
|
echo "🧪 Testing gateway connectivity..."
|
|
if ping -c 1 -W 2 $NEW_GATEWAY >/dev/null 2>&1; then
|
|
echo "✅ Gateway $NEW_GATEWAY is reachable"
|
|
else
|
|
echo "⚠️ Gateway $NEW_GATEWAY is not reachable"
|
|
fi
|
|
|
|
# Test ml110
|
|
echo ""
|
|
echo "🧪 Testing ml110 connectivity..."
|
|
if ping -c 1 -W 2 ${PROXMOX_HOST_ML110:-192.168.11.10} >/dev/null 2>&1; then
|
|
echo "✅ ml110 (${PROXMOX_HOST_ML110:-192.168.11.10}) is reachable!"
|
|
echo ""
|
|
echo "🎉 SUCCESS! You can now access ml110!"
|
|
else
|
|
echo "⚠️ ml110 (${PROXMOX_HOST_ML110:-192.168.11.10}) is not reachable"
|
|
echo " This may be due to firewall on ml110"
|
|
echo " Check ml110 firewall settings"
|
|
fi
|
|
|
|
echo ""
|
|
echo "✅ IP change complete!"
|
|
echo ""
|
|
echo "📋 Current configuration:"
|
|
ip addr show $INTERFACE | grep "inet " || echo " (checking...)"
|
|
ip route show | grep default || echo " (checking...)"
|
|
|
|
echo ""
|
|
echo "💡 To revert back to original IP:"
|
|
echo " sudo cp $BACKUP_FILE $NETPLAN_FILE"
|
|
echo " sudo netplan apply"
|