#!/usr/bin/env bash
# configure_netplan_any_ethernet.sh
# 将 Ubuntu 的 netplan 改为匹配所有 en* 物理网卡并通过 DHCP 配置，
# 同时禁止 cloud-init 自动生成网络配置。
#
# 用法：sudo bash configure_netplan_any_ethernet.sh
set -euo pipefail

[ "$(id -u)" = 0 ] || { echo "[FAIL] 需要 root" >&2; exit 1; }

NETPLAN_DIR=/etc/netplan
CLOUD_CFG_DIR=/etc/cloud/cloud.cfg.d
ACTIVE_CONFIG="$NETPLAN_DIR/01-all-ethernet.yaml"
DISABLE_CONFIG="$CLOUD_CFG_DIR/99-disable-network-config.cfg"

echo "---- 1/4 禁用 cloud-init 网络自动生成 ----"
install -d -m 0755 "$CLOUD_CFG_DIR"
printf '%s\n' 'network: {config: disabled}' > "$DISABLE_CONFIG"
chmod 0600 "$DISABLE_CONFIG"

echo "---- 2/4 备份并替换 netplan 配置 ----"
install -d -m 0755 "$NETPLAN_DIR"
for f in "$NETPLAN_DIR"/*.yaml "$NETPLAN_DIR"/*.yml; do
  [ -f "$f" ] || continue
  [ "$f" = "$ACTIVE_CONFIG" ] && continue
  case "$f" in
    *.disabled|*.bak) continue ;;
  esac
  backup="${f}.$(date +%Y%m%d%H%M%S).bak"
  mv -- "$f" "$backup"
  echo "[BACKUP] $f -> $backup"
done

cat > "$ACTIVE_CONFIG" <<'EOF'
network:
  version: 2
  ethernets:
    all-en:
      match:
        name: "en*"
      dhcp4: true
      dhcp6: false
EOF
chmod 0600 "$ACTIVE_CONFIG"

echo "---- 3/4 校验并应用 ----"
netplan generate
netplan apply

echo "---- 4/4 验证 ----"
ip -br addr
ip route show default || true
echo "[OK] netplan 配置已更新完成"
