Models

from typing import Any, Dict, List, Literal, Optional, Union

DefaultOptionTypeDef = Literal["default"]

VariableOptionTypeDef = Literal["variable"]

GlobalOptionTypeDef = Literal["global"]

Ipv4SubnetMaskDef = Literal[
    "0.0.0.0",
    "128.0.0.0",
    "192.0.0.0",
    "224.0.0.0",
    "240.0.0.0",
    "248.0.0.0",
    "252.0.0.0",
    "254.0.0.0",
    "255.0.0.0",
    "255.128.0.0",
    "255.192.0.0",
    "255.224.0.0",
    "255.240.0.0",
    "255.252.0.0",
    "255.254.0.0",
    "255.255.0.0",
    "255.255.128.0",
    "255.255.192.0",
    "255.255.224.0",
    "255.255.240.0",
    "255.255.248.0",
    "255.255.252.0",
    "255.255.254.0",
    "255.255.255.0",
    "255.255.255.128",
    "255.255.255.192",
    "255.255.255.224",
    "255.255.255.240",
    "255.255.255.248",
    "255.255.255.252",
    "255.255.255.254",
    "255.255.255.255",
]

Ipv4GatewayDef = Literal["dhcp", "nextHop", "null0"]

DefaultIpv4GatewayDef = Literal["nextHop"]

Ipv6RouteNatDef = Literal["NAT64", "NAT66"]

VpnIpv4GatewayDef = Literal["dhcp", "nextHop", "null0"]

VpnDefaultIpv4GatewayDef = Literal["nextHop"]

ManagementVpnIpv4GatewayDef = Literal["dhcp", "nextHop", "null0"]

ManagementVpnDefaultIpv4GatewayDef = Literal["nextHop"]


class OneOfVpnIdOptionsDef:
    option_type: DefaultOptionTypeDef
    value: int


class OneOfVpnNameOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfVpnNameOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfVpnNameOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfPrimaryDnsAddressIpv4OptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfPrimaryDnsAddressIpv4OptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfPrimaryDnsAddressIpv4OptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfSecondaryDnsAddressIpv4OptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfSecondaryDnsAddressIpv4OptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfSecondaryDnsAddressIpv4OptionsDef3:
    option_type: DefaultOptionTypeDef


class DnsIpv4:
    primary_dns_address_ipv4: Optional[
        Union[
            OneOfPrimaryDnsAddressIpv4OptionsDef1,
            OneOfPrimaryDnsAddressIpv4OptionsDef2,
            OneOfPrimaryDnsAddressIpv4OptionsDef3,
        ]
    ]
    secondary_dns_address_ipv4: Optional[
        Union[
            OneOfSecondaryDnsAddressIpv4OptionsDef1,
            OneOfSecondaryDnsAddressIpv4OptionsDef2,
            OneOfSecondaryDnsAddressIpv4OptionsDef3,
        ]
    ]


class OneOfPrimaryDnsAddressIpv6OptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfPrimaryDnsAddressIpv6OptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfPrimaryDnsAddressIpv6OptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfSecondaryDnsAddressIpv6OptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfSecondaryDnsAddressIpv6OptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfSecondaryDnsAddressIpv6OptionsDef3:
    option_type: DefaultOptionTypeDef


class DnsIpv6:
    primary_dns_address_ipv6: Optional[
        Union[
            OneOfPrimaryDnsAddressIpv6OptionsDef1,
            OneOfPrimaryDnsAddressIpv6OptionsDef2,
            OneOfPrimaryDnsAddressIpv6OptionsDef3,
        ]
    ]
    secondary_dns_address_ipv6: Optional[
        Union[
            OneOfSecondaryDnsAddressIpv6OptionsDef1,
            OneOfSecondaryDnsAddressIpv6OptionsDef2,
            OneOfSecondaryDnsAddressIpv6OptionsDef3,
        ]
    ]


class OneOfHostNameOptionsWithoutDefault1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfHostNameOptionsWithoutDefault2:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfListOfIpOptionsWithoutDefault1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfListOfIpOptionsWithoutDefault2:
    option_type: GlobalOptionTypeDef
    value: List[Union[Any, Any]]


class NewHostMapping:
    host_name: Union[
        OneOfHostNameOptionsWithoutDefault1,
        OneOfHostNameOptionsWithoutDefault2,
    ]
    list_of_ip: Union[
        OneOfListOfIpOptionsWithoutDefault1,
        OneOfListOfIpOptionsWithoutDefault2,
    ]


class OneOfIpV4AddressOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfIpV4AddressOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfIpV4SubnetMaskOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfIpV4SubnetMaskOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: (
        Ipv4SubnetMaskDef  # pytype: disable=annotation-type-mismatch
    )


class Prefix:
    """
    Prefix
    """

    ip_address: Union[
        OneOfIpV4AddressOptionsDef1, OneOfIpV4AddressOptionsDef2
    ]
    subnet_mask: Union[
        OneOfIpV4SubnetMaskOptionsDef1, OneOfIpV4SubnetMaskOptionsDef2
    ]


class Gateway:
    value: Optional[Any]


class OneOfIpv4NextHopAddressOptionsWithOutDefault1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfIpv4NextHopAddressOptionsWithOutDefault2:
    option_type: GlobalOptionTypeDef
    value: Union[Any, str]


class OneOfIpv4NextHopDistanceOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfIpv4NextHopDistanceOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int


class OneOfIpv4NextHopDistanceOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class NextHop:
    address: Union[
        OneOfIpv4NextHopAddressOptionsWithOutDefault1,
        OneOfIpv4NextHopAddressOptionsWithOutDefault2,
    ]
    distance: Union[
        OneOfIpv4NextHopDistanceOptionsDef1,
        OneOfIpv4NextHopDistanceOptionsDef2,
        OneOfIpv4NextHopDistanceOptionsDef3,
    ]


class OneOfIpv4GatewayDistanceOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfIpv4GatewayDistanceOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int


class OneOfIpv4GatewayDistanceOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class Ipv4Route1:
    gateway: Gateway
    # IPv4 Route Gateway Next Hop
    next_hop: List[NextHop]
    # Prefix
    prefix: Prefix
    distance: Optional[
        Union[
            OneOfIpv4GatewayDistanceOptionsDef1,
            OneOfIpv4GatewayDistanceOptionsDef2,
            OneOfIpv4GatewayDistanceOptionsDef3,
        ]
    ]


class OneOfIpv4RouteGatewayOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: Ipv4GatewayDef  # pytype: disable=annotation-type-mismatch


class OneOfIpv4RouteGatewayOptionsDef2:
    option_type: DefaultOptionTypeDef
    value: DefaultIpv4GatewayDef  # pytype: disable=annotation-type-mismatch


class Ipv4Route2:
    gateway: Union[
        OneOfIpv4RouteGatewayOptionsDef1,
        OneOfIpv4RouteGatewayOptionsDef2,
    ]
    # Prefix
    prefix: Prefix
    distance: Optional[
        Union[
            OneOfIpv4GatewayDistanceOptionsDef1,
            OneOfIpv4GatewayDistanceOptionsDef2,
            OneOfIpv4GatewayDistanceOptionsDef3,
        ]
    ]
    # IPv4 Route Gateway Next Hop
    next_hop: Optional[List[NextHop]]


class OneOfIpv6RoutePrefixOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfIpv6RoutePrefixOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfIpv6NextHopAddressOptionsWithOutDefault1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfIpv6NextHopAddressOptionsWithOutDefault2:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfIpv6NextHopDistanceOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfIpv6NextHopDistanceOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int


class OneOfIpv6NextHopDistanceOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class VpnNextHop:
    address: Union[
        OneOfIpv6NextHopAddressOptionsWithOutDefault1,
        OneOfIpv6NextHopAddressOptionsWithOutDefault2,
    ]
    distance: Union[
        OneOfIpv6NextHopDistanceOptionsDef1,
        OneOfIpv6NextHopDistanceOptionsDef2,
        OneOfIpv6NextHopDistanceOptionsDef3,
    ]


class NextHopContainer:
    # IPv6 Route Gateway Next Hop
    next_hop: Optional[List[VpnNextHop]]


class OneOfIpRoute1:
    next_hop_container: NextHopContainer


class OneOfIpv4V6RouteNull0OptionsWithoutVariable1:
    option_type: GlobalOptionTypeDef
    value: bool


class OneOfIpv4V6RouteNull0OptionsWithoutVariable2:
    option_type: DefaultOptionTypeDef
    value: bool


class OneOfIpRoute2:
    null0: Union[
        OneOfIpv4V6RouteNull0OptionsWithoutVariable1,
        OneOfIpv4V6RouteNull0OptionsWithoutVariable2,
    ]


class OneOfIpv6RouteNatOptionsWithoutDefault1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfIpv6RouteNatOptionsWithoutDefault2:
    option_type: GlobalOptionTypeDef
    value: Ipv6RouteNatDef  # pytype: disable=annotation-type-mismatch


class OneOfIpRoute3:
    nat: Union[
        OneOfIpv6RouteNatOptionsWithoutDefault1,
        OneOfIpv6RouteNatOptionsWithoutDefault2,
    ]


class Ipv6Route:
    one_of_ip_route: Union[
        OneOfIpRoute1, OneOfIpRoute2, OneOfIpRoute3
    ]
    prefix: Union[
        OneOfIpv6RoutePrefixOptionsDef1,
        OneOfIpv6RoutePrefixOptionsDef2,
    ]


class VpnData:
    vpn_id: OneOfVpnIdOptionsDef
    dns_ipv4: Optional[DnsIpv4]
    dns_ipv6: Optional[DnsIpv6]
    # IPv4 Static Route
    ipv4_route: Optional[List[Union[Ipv4Route1, Ipv4Route2]]]
    # IPv6 Static Route
    ipv6_route: Optional[List[Ipv6Route]]
    name: Optional[
        Union[
            OneOfVpnNameOptionsDef1,
            OneOfVpnNameOptionsDef2,
            OneOfVpnNameOptionsDef3,
        ]
    ]
    new_host_mapping: Optional[List[NewHostMapping]]


class Payload:
    """
    Management Vpn Post Request schema
    """

    data: VpnData
    name: str
    # Set the parcel description
    description: Optional[str]
    metadata: Optional[Any]


class Data:
    # User who last created this.
    created_by: Optional[str]
    # Timestamp of creation
    created_on: Optional[int]
    # User who last updated this.
    last_updated_by: Optional[str]
    # Timestamp of last update
    last_updated_on: Optional[int]
    parcel_id: Optional[str]
    parcel_type: Optional[str]
    # Management Vpn Post Request schema
    payload: Optional[Payload]


class GetListSdwanTransportManagementVpnPayload:
    data: Optional[List[Data]]


class CreateManagementVpnProfileParcelForTransportPostResponse:
    """
    Profile Parcel POST Response schema
    """

    parcel_id: str
    metadata: Optional[Any]


class ManagementVpnData:
    vpn_id: OneOfVpnIdOptionsDef
    dns_ipv4: Optional[DnsIpv4]
    dns_ipv6: Optional[DnsIpv6]
    # IPv4 Static Route
    ipv4_route: Optional[List[Union[Ipv4Route1, Ipv4Route2]]]
    # IPv6 Static Route
    ipv6_route: Optional[List[Ipv6Route]]
    name: Optional[
        Union[
            OneOfVpnNameOptionsDef1,
            OneOfVpnNameOptionsDef2,
            OneOfVpnNameOptionsDef3,
        ]
    ]
    new_host_mapping: Optional[List[NewHostMapping]]


class CreateManagementVpnProfileParcelForTransportPostRequest:
    """
    Management Vpn Post Request schema
    """

    data: ManagementVpnData
    name: str
    # Set the parcel description
    description: Optional[str]
    metadata: Optional[Any]


class VpnOneOfVpnIdOptionsDef:
    option_type: DefaultOptionTypeDef
    value: int


class VpnOneOfPrimaryDnsAddressIpv4OptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class VpnOneOfSecondaryDnsAddressIpv4OptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class VpnDnsIpv4:
    primary_dns_address_ipv4: Optional[
        Union[
            OneOfPrimaryDnsAddressIpv4OptionsDef1,
            VpnOneOfPrimaryDnsAddressIpv4OptionsDef2,
            OneOfPrimaryDnsAddressIpv4OptionsDef3,
        ]
    ]
    secondary_dns_address_ipv4: Optional[
        Union[
            OneOfSecondaryDnsAddressIpv4OptionsDef1,
            VpnOneOfSecondaryDnsAddressIpv4OptionsDef2,
            OneOfSecondaryDnsAddressIpv4OptionsDef3,
        ]
    ]


class VpnDnsIpv6:
    primary_dns_address_ipv6: Optional[
        Union[
            OneOfPrimaryDnsAddressIpv6OptionsDef1,
            OneOfPrimaryDnsAddressIpv6OptionsDef2,
            OneOfPrimaryDnsAddressIpv6OptionsDef3,
        ]
    ]
    secondary_dns_address_ipv6: Optional[
        Union[
            OneOfSecondaryDnsAddressIpv6OptionsDef1,
            OneOfSecondaryDnsAddressIpv6OptionsDef2,
            OneOfSecondaryDnsAddressIpv6OptionsDef3,
        ]
    ]


class VpnOneOfIpV4AddressOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class VpnPrefix:
    """
    Prefix
    """

    ip_address: Union[
        OneOfIpV4AddressOptionsDef1, VpnOneOfIpV4AddressOptionsDef2
    ]
    subnet_mask: Union[
        OneOfIpV4SubnetMaskOptionsDef1, OneOfIpV4SubnetMaskOptionsDef2
    ]


class VpnOneOfIpv4NextHopDistanceOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int


class ManagementVpnNextHop:
    address: Union[
        OneOfIpv4NextHopAddressOptionsWithOutDefault1,
        OneOfIpv4NextHopAddressOptionsWithOutDefault2,
    ]
    distance: Union[
        OneOfIpv4NextHopDistanceOptionsDef1,
        VpnOneOfIpv4NextHopDistanceOptionsDef2,
        OneOfIpv4NextHopDistanceOptionsDef3,
    ]


class VpnOneOfIpv4GatewayDistanceOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int


class VpnIpv4Route1:
    gateway: Gateway
    # IPv4 Route Gateway Next Hop
    next_hop: List[ManagementVpnNextHop]
    # Prefix
    prefix: VpnPrefix
    distance: Optional[
        Union[
            OneOfIpv4GatewayDistanceOptionsDef1,
            VpnOneOfIpv4GatewayDistanceOptionsDef2,
            OneOfIpv4GatewayDistanceOptionsDef3,
        ]
    ]


class ManagementVpnOneOfIpV4AddressOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class ManagementVpnPrefix:
    """
    Prefix
    """

    ip_address: Union[
        OneOfIpV4AddressOptionsDef1,
        ManagementVpnOneOfIpV4AddressOptionsDef2,
    ]
    subnet_mask: Union[
        OneOfIpV4SubnetMaskOptionsDef1, OneOfIpV4SubnetMaskOptionsDef2
    ]


class VpnOneOfIpv4RouteGatewayOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: (
        VpnIpv4GatewayDef  # pytype: disable=annotation-type-mismatch
    )


class VpnOneOfIpv4RouteGatewayOptionsDef2:
    option_type: DefaultOptionTypeDef
    value: VpnDefaultIpv4GatewayDef  # pytype: disable=annotation-type-mismatch


class ManagementVpnOneOfIpv4NextHopDistanceOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int


class TransportManagementVpnNextHop:
    address: Union[
        OneOfIpv4NextHopAddressOptionsWithOutDefault1,
        OneOfIpv4NextHopAddressOptionsWithOutDefault2,
    ]
    distance: Union[
        OneOfIpv4NextHopDistanceOptionsDef1,
        ManagementVpnOneOfIpv4NextHopDistanceOptionsDef2,
        OneOfIpv4NextHopDistanceOptionsDef3,
    ]


class ManagementVpnOneOfIpv4GatewayDistanceOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int


class VpnIpv4Route2:
    gateway: Union[
        VpnOneOfIpv4RouteGatewayOptionsDef1,
        VpnOneOfIpv4RouteGatewayOptionsDef2,
    ]
    # Prefix
    prefix: ManagementVpnPrefix
    distance: Optional[
        Union[
            OneOfIpv4GatewayDistanceOptionsDef1,
            ManagementVpnOneOfIpv4GatewayDistanceOptionsDef2,
            OneOfIpv4GatewayDistanceOptionsDef3,
        ]
    ]
    # IPv4 Route Gateway Next Hop
    next_hop: Optional[List[TransportManagementVpnNextHop]]


class VpnOneOfIpv6NextHopDistanceOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int


class SdwanTransportManagementVpnNextHop:
    address: Union[
        OneOfIpv6NextHopAddressOptionsWithOutDefault1,
        OneOfIpv6NextHopAddressOptionsWithOutDefault2,
    ]
    distance: Union[
        OneOfIpv6NextHopDistanceOptionsDef1,
        VpnOneOfIpv6NextHopDistanceOptionsDef2,
        OneOfIpv6NextHopDistanceOptionsDef3,
    ]


class VpnNextHopContainer:
    # IPv6 Route Gateway Next Hop
    next_hop: Optional[List[SdwanTransportManagementVpnNextHop]]


class VpnOneOfIpRoute1:
    next_hop_container: VpnNextHopContainer


class VpnIpv6Route:
    one_of_ip_route: Union[
        VpnOneOfIpRoute1, OneOfIpRoute2, OneOfIpRoute3
    ]
    prefix: Union[
        OneOfIpv6RoutePrefixOptionsDef1,
        OneOfIpv6RoutePrefixOptionsDef2,
    ]


class TransportManagementVpnData:
    vpn_id: VpnOneOfVpnIdOptionsDef
    dns_ipv4: Optional[VpnDnsIpv4]
    dns_ipv6: Optional[VpnDnsIpv6]
    # IPv4 Static Route
    ipv4_route: Optional[List[Union[VpnIpv4Route1, VpnIpv4Route2]]]
    # IPv6 Static Route
    ipv6_route: Optional[List[VpnIpv6Route]]
    name: Optional[
        Union[
            OneOfVpnNameOptionsDef1,
            OneOfVpnNameOptionsDef2,
            OneOfVpnNameOptionsDef3,
        ]
    ]
    new_host_mapping: Optional[List[NewHostMapping]]


class VpnPayload:
    """
    Management Vpn Put Request schema
    """

    data: TransportManagementVpnData
    name: str
    # Set the parcel description
    description: Optional[str]
    metadata: Optional[Any]


class GetSingleSdwanTransportManagementVpnPayload:
    # User who last created this.
    created_by: Optional[str]
    # Timestamp of creation
    created_on: Optional[int]
    # User who last updated this.
    last_updated_by: Optional[str]
    # Timestamp of last update
    last_updated_on: Optional[int]
    parcel_id: Optional[str]
    parcel_type: Optional[str]
    # Management Vpn Put Request schema
    payload: Optional[VpnPayload]


class EditManagementVpnProfileParcelForTransportPutResponse:
    """
    Profile Parcel PUT Response schema
    """

    id: str
    metadata: Optional[Any]


class ManagementVpnOneOfVpnIdOptionsDef:
    option_type: DefaultOptionTypeDef
    value: int


class ManagementVpnOneOfPrimaryDnsAddressIpv4OptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class ManagementVpnOneOfSecondaryDnsAddressIpv4OptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class ManagementVpnDnsIpv4:
    primary_dns_address_ipv4: Optional[
        Union[
            OneOfPrimaryDnsAddressIpv4OptionsDef1,
            ManagementVpnOneOfPrimaryDnsAddressIpv4OptionsDef2,
            OneOfPrimaryDnsAddressIpv4OptionsDef3,
        ]
    ]
    secondary_dns_address_ipv4: Optional[
        Union[
            OneOfSecondaryDnsAddressIpv4OptionsDef1,
            ManagementVpnOneOfSecondaryDnsAddressIpv4OptionsDef2,
            OneOfSecondaryDnsAddressIpv4OptionsDef3,
        ]
    ]


class ManagementVpnDnsIpv6:
    primary_dns_address_ipv6: Optional[
        Union[
            OneOfPrimaryDnsAddressIpv6OptionsDef1,
            OneOfPrimaryDnsAddressIpv6OptionsDef2,
            OneOfPrimaryDnsAddressIpv6OptionsDef3,
        ]
    ]
    secondary_dns_address_ipv6: Optional[
        Union[
            OneOfSecondaryDnsAddressIpv6OptionsDef1,
            OneOfSecondaryDnsAddressIpv6OptionsDef2,
            OneOfSecondaryDnsAddressIpv6OptionsDef3,
        ]
    ]


class TransportManagementVpnOneOfIpV4AddressOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class TransportManagementVpnPrefix:
    """
    Prefix
    """

    ip_address: Union[
        OneOfIpV4AddressOptionsDef1,
        TransportManagementVpnOneOfIpV4AddressOptionsDef2,
    ]
    subnet_mask: Union[
        OneOfIpV4SubnetMaskOptionsDef1, OneOfIpV4SubnetMaskOptionsDef2
    ]


class TransportManagementVpnOneOfIpv4NextHopDistanceOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int


class FeatureProfileSdwanTransportManagementVpnNextHop:
    address: Union[
        OneOfIpv4NextHopAddressOptionsWithOutDefault1,
        OneOfIpv4NextHopAddressOptionsWithOutDefault2,
    ]
    distance: Union[
        OneOfIpv4NextHopDistanceOptionsDef1,
        TransportManagementVpnOneOfIpv4NextHopDistanceOptionsDef2,
        OneOfIpv4NextHopDistanceOptionsDef3,
    ]


class TransportManagementVpnOneOfIpv4GatewayDistanceOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int


class ManagementVpnIpv4Route1:
    gateway: Gateway
    # IPv4 Route Gateway Next Hop
    next_hop: List[FeatureProfileSdwanTransportManagementVpnNextHop]
    # Prefix
    prefix: TransportManagementVpnPrefix
    distance: Optional[
        Union[
            OneOfIpv4GatewayDistanceOptionsDef1,
            TransportManagementVpnOneOfIpv4GatewayDistanceOptionsDef2,
            OneOfIpv4GatewayDistanceOptionsDef3,
        ]
    ]


class SdwanTransportManagementVpnOneOfIpV4AddressOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


class SdwanTransportManagementVpnPrefix:
    """
    Prefix
    """

    ip_address: Union[
        OneOfIpV4AddressOptionsDef1,
        SdwanTransportManagementVpnOneOfIpV4AddressOptionsDef2,
    ]
    subnet_mask: Union[
        OneOfIpV4SubnetMaskOptionsDef1, OneOfIpV4SubnetMaskOptionsDef2
    ]


class ManagementVpnOneOfIpv4RouteGatewayOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: ManagementVpnIpv4GatewayDef  # pytype: disable=annotation-type-mismatch


class ManagementVpnOneOfIpv4RouteGatewayOptionsDef2:
    option_type: DefaultOptionTypeDef
    value: ManagementVpnDefaultIpv4GatewayDef  # pytype: disable=annotation-type-mismatch


class SdwanTransportManagementVpnOneOfIpv4NextHopDistanceOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int


class V1FeatureProfileSdwanTransportManagementVpnNextHop:
    address: Union[
        OneOfIpv4NextHopAddressOptionsWithOutDefault1,
        OneOfIpv4NextHopAddressOptionsWithOutDefault2,
    ]
    distance: Union[
        OneOfIpv4NextHopDistanceOptionsDef1,
        SdwanTransportManagementVpnOneOfIpv4NextHopDistanceOptionsDef2,
        OneOfIpv4NextHopDistanceOptionsDef3,
    ]


class SdwanTransportManagementVpnOneOfIpv4GatewayDistanceOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int


class ManagementVpnIpv4Route2:
    gateway: Union[
        ManagementVpnOneOfIpv4RouteGatewayOptionsDef1,
        ManagementVpnOneOfIpv4RouteGatewayOptionsDef2,
    ]
    # Prefix
    prefix: SdwanTransportManagementVpnPrefix
    distance: Optional[
        Union[
            OneOfIpv4GatewayDistanceOptionsDef1,
            SdwanTransportManagementVpnOneOfIpv4GatewayDistanceOptionsDef2,
            OneOfIpv4GatewayDistanceOptionsDef3,
        ]
    ]
    # IPv4 Route Gateway Next Hop
    next_hop: Optional[
        List[V1FeatureProfileSdwanTransportManagementVpnNextHop]
    ]


class ManagementVpnOneOfIpv6NextHopDistanceOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int


class NextHop1:
    address: Union[
        OneOfIpv6NextHopAddressOptionsWithOutDefault1,
        OneOfIpv6NextHopAddressOptionsWithOutDefault2,
    ]
    distance: Union[
        OneOfIpv6NextHopDistanceOptionsDef1,
        ManagementVpnOneOfIpv6NextHopDistanceOptionsDef2,
        OneOfIpv6NextHopDistanceOptionsDef3,
    ]


class ManagementVpnNextHopContainer:
    # IPv6 Route Gateway Next Hop
    next_hop: Optional[List[NextHop1]]


class ManagementVpnOneOfIpRoute1:
    next_hop_container: ManagementVpnNextHopContainer


class ManagementVpnIpv6Route:
    one_of_ip_route: Union[
        ManagementVpnOneOfIpRoute1, OneOfIpRoute2, OneOfIpRoute3
    ]
    prefix: Union[
        OneOfIpv6RoutePrefixOptionsDef1,
        OneOfIpv6RoutePrefixOptionsDef2,
    ]


class SdwanTransportManagementVpnData:
    vpn_id: ManagementVpnOneOfVpnIdOptionsDef
    dns_ipv4: Optional[ManagementVpnDnsIpv4]
    dns_ipv6: Optional[ManagementVpnDnsIpv6]
    # IPv4 Static Route
    ipv4_route: Optional[
        List[Union[ManagementVpnIpv4Route1, ManagementVpnIpv4Route2]]
    ]
    # IPv6 Static Route
    ipv6_route: Optional[List[ManagementVpnIpv6Route]]
    name: Optional[
        Union[
            OneOfVpnNameOptionsDef1,
            OneOfVpnNameOptionsDef2,
            OneOfVpnNameOptionsDef3,
        ]
    ]
    new_host_mapping: Optional[List[NewHostMapping]]


class EditManagementVpnProfileParcelForTransportPutRequest:
    """
    Management Vpn Put Request schema
    """

    data: SdwanTransportManagementVpnData
    name: str
    # Set the parcel description
    description: Optional[str]
    metadata: Optional[Any]