"""Netplan schema models used by bridge/network configuration APIs.""" from typing import Dict, List, Optional from pydantic import BaseModel, Field class Nameservers(BaseModel): """DNS nameserver configuration.""" addresses: List[str] = Field(default_factory=list) search: List[str] = Field(default_factory=list) class EthernetConfig(BaseModel): """Netplan ethernet interface configuration.""" dhcp4: Optional[bool] = None dhcp6: Optional[bool] = None addresses: Optional[List[str]] = None gateway4: Optional[str] = None gateway6: Optional[str] = None nameservers: Optional[Nameservers] = None optional: Optional[bool] = None class BridgeConfig(BaseModel): """Netplan bridge configuration.""" interfaces: List[str] = Field(default_factory=list) dhcp4: Optional[bool] = None dhcp6: Optional[bool] = None addresses: Optional[List[str]] = None gateway4: Optional[str] = None gateway6: Optional[str] = None nameservers: Optional[Nameservers] = None parameters: Optional[dict] = None optional: Optional[bool] = None class NetworkConfig(BaseModel): """Top-level Netplan network object.""" version: int = 2 renderer: Optional[str] = "networkd" ethernets: Dict[str, EthernetConfig] = Field(default_factory=dict) bridges: Dict[str, BridgeConfig] = Field(default_factory=dict)