06-netplan修改策略.md 4.7 KB

netplan 修改策略

1. 目标

定义首版 NetTool 在 Ubuntu 24 上修改 netplan 的具体策略,重点说明:

  1. 修改哪个文件
  2. 修改哪些字段
  3. 保留哪些字段
  4. 什么时候回滚

2. 首版场景

首版默认场景是新机器初始化。

特点:

  1. 一般只有一个 netplan YAML 文件
  2. 不重点处理复杂历史网络配置兼容
  3. 核心目标是把选中的真实接口配置正确写入系统

3. 文件定位规则

3.1 默认规则

  1. 扫描 /etc/netplan/*.yaml
  2. 如果只存在一个 YAML 文件:
    • 直接将该文件作为本次修改目标文件
  3. 如果不存在 YAML 文件:
    • 返回错误,由后续实现决定是否补充自动创建能力
  4. 如果存在多个 YAML 文件:
    • 首版直接返回错误
    • 不自动猜测该改哪个文件

3.2 为什么这样定

原因:

  1. 符合新机器初始化场景
  2. 可避免误改错误文件
  3. 可避免首版陷入复杂多文件兼容

4. 修改方式

4.1 总体原则

首版不建议做字符串替换或正则替换。

建议方式:

  1. 先按 YAML 结构解析目标文件
  2. 找到目标真实接口对应节点
  3. 按结构化方式更新字段
  4. 再将整个文件重新写回

说明:

  1. 这是“修改现有文件”
  2. 但实现方式仍然应该是结构化重写
  3. 不建议做纯文本级局部替换

4.2 修改范围

首版只修改:

  1. 用户选中的目标真实接口配置
  2. 必要时补充当前管理接口的固定维护地址配置

不主动修改:

  1. 其他无关接口
  2. 与本次目标接口无关的系统网络字段

5. 目标接口字段处理规则

假设当前目标真实接口为 enp1s0

5.1 需要写入或覆盖的字段

对于目标接口,首版建议由 NetTool 明确写入或覆盖以下字段:

  1. dhcp4
    • 设为 false
  2. addresses
    • 按用户输入的一个或多个 IP 和前缀长度生成
  3. routes
    • 若用户填写默认网关或静态路由,则写入
    • 默认网关表达为 to: default
    • 若用户未填写路由,则删除该字段
  4. nameservers.addresses
    • 若用户填写 DNS,则写入
    • 若用户未填写 DNS,则删除或置空

5.2 建议删除的旧字段

若目标接口原本存在以下字段,首版建议按新配置重置,避免旧状态残留:

  1. 旧的 addresses
  2. 旧的 gateway4
  3. 旧的 nameservers
  4. 旧的 dhcp4
  5. 旧的 routes

5.3 建议保留的字段

若目标接口下已存在且与本次配置无直接冲突,首版可考虑保留:

  1. optional
  2. mtu
  3. wakeonlan

但首版如果实现复杂,也可以先不保留这些增强字段,重点保证主配置正确。

6. 管理接口字段处理规则

当前管理接口对应逻辑标识为 LAN2,但实际操作对象仍是真实接口名。

首版目标:

  1. 保证管理接口上有固定维护地址 169.254.100.2/16
  2. 允许该接口继续通过 DHCP 获取外联地址

建议处理:

  1. 若管理接口节点已存在:
    • 补充或更新固定维护地址
    • 保留 DHCP4 能力
  2. 若管理接口节点不存在:
    • 由 NetTool 创建该接口节点

7. 备份与回滚规则

7.1 备份规则

每次应用配置前:

  1. 先备份目标 netplan 文件
  2. 备份文件应完整保留原始内容
  3. 备份文件路径由实现决定,但应可用于立即回滚

7.2 应用规则

  1. 备份完成后写回修改后的文件
  2. 执行 netplan apply
  3. 客户端仍可连接时,在限定时间内自动确认保留配置
  4. 未自动确认或执行失败时恢复本次备份并再次执行 netplan apply

7.3 回滚规则

出现以下情况时执行回滚:

  1. netplan apply 执行失败
  2. 客户端未能在超时时间内自动确认保留配置
  3. 其他明确判定为配置失败的情况

回滚步骤:

  1. 恢复备份文件
  2. 再次执行 netplan apply
  3. 记录回滚结果

8. 首版不处理的情况

首版建议明确不自动处理以下情况:

  1. /etc/netplan 下存在多个 YAML 文件
  2. 多个文件共同描述同一接口
  3. 复杂路由策略合并
  4. IPv6 配置兼容
  5. 复杂自定义 nameserver/search 域保留

这些情况可直接返回错误,由后续版本再扩展。

9. 建议实现顺序

  1. 先完成“定位单个 netplan 文件”能力
  2. 再完成“读取并解析 YAML 结构”能力
  3. 再完成“修改目标真实接口字段”能力
  4. 再完成“备份、写回、apply、回滚”闭环

10. 当前推荐结论

首版 netplan 修改策略建议固定为:

  1. 默认认为系统只有一个 netplan YAML 文件
  2. 修改该现有文件
  3. 修改前先完整备份
  4. 按 YAML 结构更新目标真实接口字段
  5. 失败则用原文件回滚