Files
proxmox/scripts/unifi/change-ip-to-vlan11-netplan.sh
defiQUG b3a8fe4496
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
chore: sync all changes to Gitea
- Config, docs, scripts, and backup manifests
- Submodule refs unchanged (m = modified content in submodules)

Made-with: Cursor
2026-03-02 11:37:34 -08:00

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"