Models

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

VariableOptionTypeDef = Literal["variable"]

GlobalOptionTypeDef = Literal["global"]

DefaultOptionTypeDef = Literal["default"]

OptionType = Literal["default", "global"]

SptThresholdDef = Literal["0", "infinity"]

DefaultSptThresholdDef = Literal["0"]


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


class OneOfOnBooleanDefaultFalseOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: bool


class OneOfOnBooleanDefaultFalseOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: bool


class OneOfThresholdOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfThresholdOptionsDef3:
    option_type: DefaultOptionTypeDef


class LocalConfigDef:
    local: Union[
        OneOfOnBooleanDefaultFalseOptionsDef1,
        OneOfOnBooleanDefaultFalseOptionsDef2,
        OneOfOnBooleanDefaultFalseOptionsDef3,
    ]
    threshold: Optional[
        Union[
            OneOfThresholdOptionsDef1,
            OneOfThresholdOptionsDef2,
            OneOfThresholdOptionsDef3,
        ]
    ]


class Basic:
    """
    multicast basic Attributes
    """

    local_config: LocalConfigDef
    spt_only: Union[
        OneOfOnBooleanDefaultFalseOptionsDef1,
        OneOfOnBooleanDefaultFalseOptionsDef2,
        OneOfOnBooleanDefaultFalseOptionsDef3,
    ]


class OneOfIfNameOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfIgmpVersionOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class OneOfIgmpVersionOptionsDef2:
    option_type: DefaultOptionTypeDef
    value: int


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


class OneOfMulticastIpV4AddressOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfIpV4AddressDefaultOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: Any


class OneOfIpV4AddressDefaultOptionsDef3:
    option_type: DefaultOptionTypeDef


class JoinGroup:
    group_address: Union[
        OneOfMulticastIpV4AddressOptionsDef1,
        OneOfMulticastIpV4AddressOptionsDef2,
    ]
    source_address: Optional[
        Union[
            OneOfIpV4AddressDefaultOptionsDef1,
            OneOfIpV4AddressDefaultOptionsDef2,
            OneOfIpV4AddressDefaultOptionsDef3,
        ]
    ]


class Interface:
    interface_name: Union[
        OneOfIfNameOptionsDef1, OneOfIfNameOptionsDef2
    ]
    version: Union[
        OneOfIgmpVersionOptionsDef1, OneOfIgmpVersionOptionsDef2
    ]
    # Configure static joins
    join_group: Optional[List[JoinGroup]]


class Igmp:
    """
    set igmp Attributes
    """

    # Set IGMP interface parameters
    interface: List[Interface]


class EnableSsmFlag:
    """
    turn SSM on/off
    """

    option_type: OptionType
    value: Any


class SsmRangeConfigDef1:
    # turn SSM on/off
    enable_ssm_flag: EnableSsmFlag


class BooleanGlobalTrueOptionsDef:
    option_type: GlobalOptionTypeDef
    value: bool


class OneOfRangeOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfRangeOptionsDef3:
    option_type: DefaultOptionTypeDef


class SsmRangeConfigDef2:
    enable_ssm_flag: BooleanGlobalTrueOptionsDef
    range: Optional[
        Union[
            OneOfRangeOptionsDef1,
            OneOfRangeOptionsDef2,
            OneOfRangeOptionsDef3,
        ]
    ]


class OneOfSptThresholdOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: SptThresholdDef


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


class OneOfSptThresholdOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: DefaultSptThresholdDef  # pytype: disable=annotation-type-mismatch


class Ssm:
    """
    ssm Attributes
    """

    ssm_range_config: Union[SsmRangeConfigDef1, SsmRangeConfigDef2]
    spt_threshold: Optional[
        Union[
            OneOfSptThresholdOptionsDef1,
            OneOfSptThresholdOptionsDef2,
            OneOfSptThresholdOptionsDef3,
        ]
    ]


class OneOfInterfaceQueryIntervalOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfInterfaceQueryIntervalOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class OneOfInterfaceJoinPruneIntervalOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfInterfaceJoinPruneIntervalOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class MulticastInterface:
    interface_name: Union[
        OneOfIfNameOptionsDef1, OneOfIfNameOptionsDef2
    ]
    join_prune_interval: Union[
        OneOfInterfaceJoinPruneIntervalOptionsDef1,
        OneOfInterfaceJoinPruneIntervalOptionsDef2,
        OneOfInterfaceJoinPruneIntervalOptionsDef3,
    ]
    query_interval: Union[
        OneOfInterfaceQueryIntervalOptionsDef1,
        OneOfInterfaceQueryIntervalOptionsDef2,
        OneOfInterfaceQueryIntervalOptionsDef3,
    ]


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


class OneOfIpV4AddressOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: Any


class OneOfAclOptionsNoDefaultDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class RpAddr:
    access_list: Union[
        OneOfAclOptionsNoDefaultDef1, OneOfAclOptionsNoDefaultDef2
    ]
    address: Union[
        OneOfIpV4AddressOptionsDef1, OneOfIpV4AddressOptionsDef2
    ]
    override: Optional[
        Union[
            OneOfOnBooleanDefaultFalseOptionsDef1,
            OneOfOnBooleanDefaultFalseOptionsDef2,
            OneOfOnBooleanDefaultFalseOptionsDef3,
        ]
    ]


class OneOfSendRpAnnounceListScopeOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class SendRpAnnounceList:
    interface_name: Union[
        OneOfIfNameOptionsDef1, OneOfIfNameOptionsDef2
    ]
    scope: Union[
        OneOfSendRpAnnounceListScopeOptionsDef1,
        OneOfSendRpAnnounceListScopeOptionsDef2,
    ]


class OneOfScopeOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class SendRpDiscovery:
    interface_name: Union[
        OneOfIfNameOptionsDef1, OneOfIfNameOptionsDef2
    ]
    scope: Union[OneOfScopeOptionsDef1, OneOfScopeOptionsDef2]


class AutoRp:
    """
    autoRp Attributes
    """

    enable_auto_rp_flag: Optional[
        Union[
            OneOfOnBooleanDefaultFalseOptionsDef1,
            OneOfOnBooleanDefaultFalseOptionsDef2,
            OneOfOnBooleanDefaultFalseOptionsDef3,
        ]
    ]
    # Enable or disable RP Announce
    send_rp_announce_list: Optional[List[SendRpAnnounceList]]
    # Enable or disable RP Discovery
    send_rp_discovery: Optional[List[SendRpDiscovery]]


class OneOfRpCandidateIntervalOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfRpCandidateIntervalOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfRpCandidatePriorityOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfRpCandidatePriorityOptionsDef3:
    option_type: DefaultOptionTypeDef


class RpCandidate:
    interface_name: Union[
        OneOfIfNameOptionsDef1, OneOfIfNameOptionsDef2
    ]
    group_list: Optional[
        Union[
            OneOfRangeOptionsDef1,
            OneOfRangeOptionsDef2,
            OneOfRangeOptionsDef3,
        ]
    ]
    interval: Optional[
        Union[
            OneOfRpCandidateIntervalOptionsDef1,
            OneOfRpCandidateIntervalOptionsDef2,
            OneOfRpCandidateIntervalOptionsDef3,
        ]
    ]
    priority: Optional[
        Union[
            OneOfRpCandidatePriorityOptionsDef1,
            OneOfRpCandidatePriorityOptionsDef2,
            OneOfRpCandidatePriorityOptionsDef3,
        ]
    ]


class OneOfMaskOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfMaskOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfPriorityOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfPriorityOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfAcceptRpCandidateOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfAcceptRpCandidateOptionsDef3:
    option_type: DefaultOptionTypeDef


class BsrCandidate:
    interface_name: Union[
        OneOfIfNameOptionsDef1, OneOfIfNameOptionsDef2
    ]
    accept_rp_candidate: Optional[
        Union[
            OneOfAcceptRpCandidateOptionsDef1,
            OneOfAcceptRpCandidateOptionsDef2,
            OneOfAcceptRpCandidateOptionsDef3,
        ]
    ]
    mask: Optional[
        Union[
            OneOfMaskOptionsDef1,
            OneOfMaskOptionsDef2,
            OneOfMaskOptionsDef3,
        ]
    ]
    priority: Optional[
        Union[
            OneOfPriorityOptionsDef1,
            OneOfPriorityOptionsDef2,
            OneOfPriorityOptionsDef3,
        ]
    ]


class PimBsr:
    """
    pimBSR Attributes
    """

    # bsr candidate Attributes
    bsr_candidate: Optional[List[BsrCandidate]]
    # Set RP Discovery Scope
    rp_candidate: Optional[List[RpCandidate]]


class Pim:
    """
    multicast pim Attributes
    """

    # ssm Attributes
    ssm: Ssm
    # autoRp Attributes
    auto_rp: Optional[AutoRp]
    # Set PIM interface parameters
    interface: Optional[List[MulticastInterface]]
    # pimBSR Attributes
    pim_bsr: Optional[PimBsr]
    # Set Static RP Address(es)
    rp_addr: Optional[List[RpAddr]]


class OneOfMeshGroupOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfMeshGroupOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfPeerIpOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfPeerConnectSourceIntfOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfPeerConnectSourceIntfOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfPeerRemoteAsOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfPeerRemoteAsOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfPeerPasswordOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfPeerPasswordOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfPeerKeepaliveIntervalOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfPeerKeepaliveIntervalOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfPeerKeepaliveHoldTimeOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfPeerKeepaliveHoldTimeOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfSaLimitOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfSaLimitOptionsDef3:
    option_type: DefaultOptionTypeDef


class DefaultPeer:
    """
    Set MSDP default peer
    """

    option_type: OptionType
    value: Any


class OneOfPeerDefaultDef1:
    # Set MSDP default peer
    default_peer: DefaultPeer


class RefId:
    option_type: GlobalOptionTypeDef
    value: str


class ParcelReferenceDef:
    ref_id: RefId


class OneOfPeerDefaultDef2:
    default_peer: BooleanGlobalTrueOptionsDef
    prefix_list: Optional[ParcelReferenceDef]


class Peer:
    peer_ip: Union[OneOfPeerIpOptionsDef1, OneOfPeerIpOptionsDef2]
    connect_source_intf: Optional[
        Union[
            OneOfPeerConnectSourceIntfOptionsDef1,
            OneOfPeerConnectSourceIntfOptionsDef2,
            OneOfPeerConnectSourceIntfOptionsDef3,
        ]
    ]
    default: Optional[
        Union[OneOfPeerDefaultDef1, OneOfPeerDefaultDef2]
    ]
    keepalive_hold_time: Optional[
        Union[
            OneOfPeerKeepaliveHoldTimeOptionsDef1,
            OneOfPeerKeepaliveHoldTimeOptionsDef2,
            OneOfPeerKeepaliveHoldTimeOptionsDef3,
        ]
    ]
    keepalive_interval: Optional[
        Union[
            OneOfPeerKeepaliveIntervalOptionsDef1,
            OneOfPeerKeepaliveIntervalOptionsDef2,
            OneOfPeerKeepaliveIntervalOptionsDef3,
        ]
    ]
    password: Optional[
        Union[
            OneOfPeerPasswordOptionsDef1,
            OneOfPeerPasswordOptionsDef2,
            OneOfPeerPasswordOptionsDef3,
        ]
    ]
    remote_as: Optional[
        Union[
            OneOfPeerRemoteAsOptionsDef1,
            OneOfPeerRemoteAsOptionsDef2,
            OneOfPeerRemoteAsOptionsDef3,
        ]
    ]
    sa_limit: Optional[
        Union[
            OneOfSaLimitOptionsDef1,
            OneOfSaLimitOptionsDef2,
            OneOfSaLimitOptionsDef3,
        ]
    ]


class MsdpList:
    # Configure peer
    peer: List[Peer]
    mesh_group: Optional[
        Union[
            OneOfMeshGroupOptionsDef1,
            OneOfMeshGroupOptionsDef2,
            OneOfMeshGroupOptionsDef3,
        ]
    ]


class OneOfPeerOriginatorIdOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfPeerOriginatorIdOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfRefreshTimerOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfRefreshTimerOptionsDef3:
    option_type: DefaultOptionTypeDef


class Msdp:
    """
    multicast MSDP
    """

    # multicast MSDP peer
    msdp_list: Optional[List[MsdpList]]
    originator_id: Optional[
        Union[
            OneOfPeerOriginatorIdOptionsDef1,
            OneOfPeerOriginatorIdOptionsDef2,
            OneOfPeerOriginatorIdOptionsDef3,
        ]
    ]
    refresh_timer: Optional[
        Union[
            OneOfRefreshTimerOptionsDef1,
            OneOfRefreshTimerOptionsDef2,
            OneOfRefreshTimerOptionsDef3,
        ]
    ]


class Data:
    # multicast basic Attributes
    basic: Basic
    # set igmp Attributes
    igmp: Optional[Igmp]
    # multicast MSDP
    msdp: Optional[Msdp]
    # multicast pim Attributes
    pim: Optional[Pim]


class Payload:
    """
    routing/multicast profile parcel schema for request
    """

    data: Data
    description: Optional[str]
    metadata: Optional[Any]
    name: Optional[str]


class GetLanVpnAssociatedRoutingMulticastParcelsForServiceGetResponse:
    # 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]
    # routing/multicast profile parcel schema for request
    payload: Optional[Payload]


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

    parcel_id: str
    metadata: Optional[Any]


class CreateLanVpnAndRoutingMulticastParcelAssociationForServicePostRequest:
    """
    Profile Parcel POST Request schema
    """

    parcel_id: str
    metadata: Optional[Any]


class GetSingleSdwanServiceLanVpnRoutingMulticastPayload:
    # 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]
    # routing/multicast profile parcel schema for request
    payload: Optional[Payload]


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

    id: str
    metadata: Optional[Any]


class EditLanVpnAndRoutingMulticastParcelAssociationForServicePutRequest:
    """
    Profile Parcel POST Request schema
    """

    parcel_id: str
    metadata: Optional[Any]