Models

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

GlobalOptionTypeDef = Literal["global"]

VariableOptionTypeDef = Literal["variable"]

DefaultOptionTypeDef = Literal["default"]

UserPrivilegeDef = Literal["1", "15"]

DefaultUserPrivilegeDef = Literal["15"]

UserPubkeyChainKeyTypeDef = Literal["ssh-rsa"]

RadiusServerKeyEnumDef = Literal["6", "7"]

RadiusServerKeyTypeDef = Literal["key", "pac"]

DefaultRadiusServerKeyTypeDef = Literal["key"]

TacacsServerKeyEnumDef = Literal["6", "7"]

AccountingRuleMethodDef = Literal[
    "commands", "exec", "network", "system"
]

AccountingRuleLevelDef = Literal["1", "15"]

AuthorizationRuleMethodDef = Literal["commands"]

AuthorizationRuleLevelDef = Literal["1", "15"]


class OneOfAuthenticationGroupOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: bool


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


class OneOfAuthenticationGroupOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: bool


class OneOfAccountingGroupOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: bool


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


class OneOfAccountingGroupOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: bool


class OneOfServerAuthOrderOptionsDef:
    option_type: GlobalOptionTypeDef
    value: List[str]


class OneOfUserNameOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfUserPasswordOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfUserPrivilegeOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: UserPrivilegeDef


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


class OneOfUserPrivilegeOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: DefaultUserPrivilegeDef  # pytype: disable=annotation-type-mismatch


class OneOfUserPubkeyChainKeyStringOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfUserPubkeyChainKeyTypeOptionsDef:
    option_type: GlobalOptionTypeDef
    value: UserPubkeyChainKeyTypeDef  # pytype: disable=annotation-type-mismatch


class PubkeyChain:
    key_string: Union[
        OneOfUserPubkeyChainKeyStringOptionsDef1,
        OneOfUserPubkeyChainKeyStringOptionsDef2,
    ]
    key_type: Optional[OneOfUserPubkeyChainKeyTypeOptionsDef]


class User:
    name: Union[OneOfUserNameOptionsDef1, OneOfUserNameOptionsDef2]
    password: Union[
        OneOfUserPasswordOptionsDef1, OneOfUserPasswordOptionsDef2
    ]
    privilege: Optional[
        Union[
            OneOfUserPrivilegeOptionsDef1,
            OneOfUserPrivilegeOptionsDef2,
            OneOfUserPrivilegeOptionsDef3,
        ]
    ]
    # List of RSA public-keys per user
    pubkey_chain: Optional[List[PubkeyChain]]


class OneOfRadiusGroupNameOptionsDef:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfVrfOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfVrfOptionsDef2:
    option_type: DefaultOptionTypeDef


class OneOfInterfaceNameOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfInterfaceNameOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfRadiusServerAddressOptionsDef:
    option_type: GlobalOptionTypeDef
    value: Any


class OneOfRadiusServerAuthPortOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfRadiusServerAuthPortOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class OneOfRadiusServerAcctPortOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfRadiusServerAcctPortOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class OneOfRadiusServerTimeoutOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfRadiusServerTimeoutOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class OneOfRadiusServerRetransmitOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfRadiusServerRetransmitOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class OneOfRadiusServerKeyOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfRadiusServerSecretKeyOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfRadiusServerSecretKeyOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfRadiusServerKeyEnumOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: RadiusServerKeyEnumDef  # pytype: disable=annotation-type-mismatch


class OneOfRadiusServerKeyEnumOptionsDef2:
    option_type: DefaultOptionTypeDef


class OneOfRadiusServerKeyTypeOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: RadiusServerKeyTypeDef


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


class OneOfRadiusServerKeyTypeOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: DefaultRadiusServerKeyTypeDef  # pytype: disable=annotation-type-mismatch


class Server:
    address: OneOfRadiusServerAddressOptionsDef
    key: Union[
        OneOfRadiusServerKeyOptionsDef1,
        OneOfRadiusServerKeyOptionsDef2,
    ]
    acct_port: Optional[
        Union[
            OneOfRadiusServerAcctPortOptionsDef1,
            OneOfRadiusServerAcctPortOptionsDef2,
            OneOfRadiusServerAcctPortOptionsDef3,
        ]
    ]
    auth_port: Optional[
        Union[
            OneOfRadiusServerAuthPortOptionsDef1,
            OneOfRadiusServerAuthPortOptionsDef2,
            OneOfRadiusServerAuthPortOptionsDef3,
        ]
    ]
    key_enum: Optional[
        Union[
            OneOfRadiusServerKeyEnumOptionsDef1,
            OneOfRadiusServerKeyEnumOptionsDef2,
        ]
    ]
    key_type: Optional[
        Union[
            OneOfRadiusServerKeyTypeOptionsDef1,
            OneOfRadiusServerKeyTypeOptionsDef2,
            OneOfRadiusServerKeyTypeOptionsDef3,
        ]
    ]
    retransmit: Optional[
        Union[
            OneOfRadiusServerRetransmitOptionsDef1,
            OneOfRadiusServerRetransmitOptionsDef2,
            OneOfRadiusServerRetransmitOptionsDef3,
        ]
    ]
    secret_key: Optional[
        Union[
            OneOfRadiusServerSecretKeyOptionsDef1,
            OneOfRadiusServerSecretKeyOptionsDef2,
            OneOfRadiusServerSecretKeyOptionsDef3,
        ]
    ]
    timeout: Optional[
        Union[
            OneOfRadiusServerTimeoutOptionsDef1,
            OneOfRadiusServerTimeoutOptionsDef2,
            OneOfRadiusServerTimeoutOptionsDef3,
        ]
    ]


class Radius:
    group_name: OneOfRadiusGroupNameOptionsDef
    # Configure the Radius server
    server: List[Server]
    source_interface: Optional[
        Union[
            OneOfInterfaceNameOptionsDef1,
            OneOfInterfaceNameOptionsDef2,
            OneOfInterfaceNameOptionsDef3,
        ]
    ]
    vrf: Optional[Union[OneOfVrfOptionsDef1, OneOfVrfOptionsDef2]]


class OneOfTacacsGroupNameOptionsDef:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfTacacsServerAddressOptionsDef:
    option_type: GlobalOptionTypeDef
    value: Any


class OneOfTacacsServerPortOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfTacacsServerPortOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class OneOfTacacsServerTimeoutOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfTacacsServerTimeoutOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class OneOfTacacsServerKeyOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfTacacsServerSecretKeyOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfTacacsServerKeyEnumOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: TacacsServerKeyEnumDef  # pytype: disable=annotation-type-mismatch


class OneOfTacacsServerKeyEnumOptionsDef2:
    option_type: DefaultOptionTypeDef


class AaaServer:
    address: OneOfTacacsServerAddressOptionsDef
    key: Union[
        OneOfTacacsServerKeyOptionsDef1,
        OneOfTacacsServerKeyOptionsDef2,
    ]
    key_enum: Optional[
        Union[
            OneOfTacacsServerKeyEnumOptionsDef1,
            OneOfTacacsServerKeyEnumOptionsDef2,
        ]
    ]
    port: Optional[
        Union[
            OneOfTacacsServerPortOptionsDef1,
            OneOfTacacsServerPortOptionsDef2,
            OneOfTacacsServerPortOptionsDef3,
        ]
    ]
    secret_key: Optional[
        Union[
            OneOfTacacsServerSecretKeyOptionsDef1,
            OneOfTacacsServerSecretKeyOptionsDef2,
        ]
    ]
    timeout: Optional[
        Union[
            OneOfTacacsServerTimeoutOptionsDef1,
            OneOfTacacsServerTimeoutOptionsDef2,
            OneOfTacacsServerTimeoutOptionsDef3,
        ]
    ]


class Tacacs:
    group_name: OneOfTacacsGroupNameOptionsDef
    # Configure the TACACS server
    server: List[AaaServer]
    source_interface: Optional[
        Union[
            OneOfInterfaceNameOptionsDef1,
            OneOfInterfaceNameOptionsDef2,
            OneOfInterfaceNameOptionsDef3,
        ]
    ]
    vrf: Optional[Union[OneOfVrfOptionsDef1, OneOfVrfOptionsDef2]]


class OneOfAccountingRuleRuleIdOptionsDef:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfAccountingRuleMethodOptionsDef:
    option_type: GlobalOptionTypeDef
    value: AccountingRuleMethodDef  # pytype: disable=annotation-type-mismatch


class OneOfAccountingRuleLevelOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: AccountingRuleLevelDef  # pytype: disable=annotation-type-mismatch


class OneOfAccountingRuleLevelOptionsDef2:
    option_type: DefaultOptionTypeDef


class OneOfAccountingRuleStartStopOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: bool


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


class OneOfAccountingRuleStartStopOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: bool


class OneOfAccountingRuleGroupOptionsDef:
    option_type: GlobalOptionTypeDef
    value: List[str]


class AccountingRule:
    group: OneOfAccountingRuleGroupOptionsDef
    method: OneOfAccountingRuleMethodOptionsDef
    rule_id: OneOfAccountingRuleRuleIdOptionsDef
    level: Optional[
        Union[
            OneOfAccountingRuleLevelOptionsDef1,
            OneOfAccountingRuleLevelOptionsDef2,
        ]
    ]
    start_stop: Optional[
        Union[
            OneOfAccountingRuleStartStopOptionsDef1,
            OneOfAccountingRuleStartStopOptionsDef2,
            OneOfAccountingRuleStartStopOptionsDef3,
        ]
    ]


class OneOfAuthorizationConsoleOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: bool


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


class OneOfAuthorizationConsoleOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: bool


class OneOfAuthorizationConfigCommandsOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: bool


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


class OneOfAuthorizationConfigCommandsOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: bool


class OneOfAuthorizationRuleRuleIdOptionsDef:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfAuthorizationRuleMethodOptionsDef:
    option_type: GlobalOptionTypeDef
    value: AuthorizationRuleMethodDef  # pytype: disable=annotation-type-mismatch


class OneOfAuthorizationRuleLevelOptionsDef:
    option_type: GlobalOptionTypeDef
    value: AuthorizationRuleLevelDef  # pytype: disable=annotation-type-mismatch


class OneOfAuthorizationRuleGroupOptionsDef:
    option_type: GlobalOptionTypeDef
    value: List[str]


class OneOfAuthorizationRuleIfAuthenticatedOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: bool


class OneOfAuthorizationRuleIfAuthenticatedOptionsDef2:
    option_type: DefaultOptionTypeDef
    value: bool


class AuthorizationRule:
    group: OneOfAuthorizationRuleGroupOptionsDef
    level: OneOfAuthorizationRuleLevelOptionsDef
    method: OneOfAuthorizationRuleMethodOptionsDef
    rule_id: OneOfAuthorizationRuleRuleIdOptionsDef
    if_authenticated: Optional[
        Union[
            OneOfAuthorizationRuleIfAuthenticatedOptionsDef1,
            OneOfAuthorizationRuleIfAuthenticatedOptionsDef2,
        ]
    ]


class AaaData:
    accounting_group: Union[
        OneOfAccountingGroupOptionsDef1,
        OneOfAccountingGroupOptionsDef2,
        OneOfAccountingGroupOptionsDef3,
    ]
    authentication_group: Union[
        OneOfAuthenticationGroupOptionsDef1,
        OneOfAuthenticationGroupOptionsDef2,
        OneOfAuthenticationGroupOptionsDef3,
    ]
    authorization_config_commands: Union[
        OneOfAuthorizationConfigCommandsOptionsDef1,
        OneOfAuthorizationConfigCommandsOptionsDef2,
        OneOfAuthorizationConfigCommandsOptionsDef3,
    ]
    authorization_console: Union[
        OneOfAuthorizationConsoleOptionsDef1,
        OneOfAuthorizationConsoleOptionsDef2,
        OneOfAuthorizationConsoleOptionsDef3,
    ]
    server_auth_order: OneOfServerAuthOrderOptionsDef
    # Configure the accounting rules
    accounting_rule: Optional[List[AccountingRule]]
    # Configure the Authorization Rules
    authorization_rule: Optional[List[AuthorizationRule]]
    # Configure the Radius serverGroup
    radius: Optional[List[Radius]]
    # Configure the TACACS serverGroup
    tacacs: Optional[List[Tacacs]]
    # Create local login account
    user: Optional[List[User]]


class Payload:
    """
    SD-Routing AAA feature schema for POST/PUT request
    """

    data: AaaData
    name: str
    # Set the feature 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]
    # SD-Routing AAA feature schema for POST/PUT request
    payload: Optional[Payload]


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


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

    parcel_id: str
    metadata: Optional[Any]


class SystemAaaData:
    accounting_group: Union[
        OneOfAccountingGroupOptionsDef1,
        OneOfAccountingGroupOptionsDef2,
        OneOfAccountingGroupOptionsDef3,
    ]
    authentication_group: Union[
        OneOfAuthenticationGroupOptionsDef1,
        OneOfAuthenticationGroupOptionsDef2,
        OneOfAuthenticationGroupOptionsDef3,
    ]
    authorization_config_commands: Union[
        OneOfAuthorizationConfigCommandsOptionsDef1,
        OneOfAuthorizationConfigCommandsOptionsDef2,
        OneOfAuthorizationConfigCommandsOptionsDef3,
    ]
    authorization_console: Union[
        OneOfAuthorizationConsoleOptionsDef1,
        OneOfAuthorizationConsoleOptionsDef2,
        OneOfAuthorizationConsoleOptionsDef3,
    ]
    server_auth_order: OneOfServerAuthOrderOptionsDef
    # Configure the accounting rules
    accounting_rule: Optional[List[AccountingRule]]
    # Configure the Authorization Rules
    authorization_rule: Optional[List[AuthorizationRule]]
    # Configure the Radius serverGroup
    radius: Optional[List[Radius]]
    # Configure the TACACS serverGroup
    tacacs: Optional[List[Tacacs]]
    # Create local login account
    user: Optional[List[User]]


class CreateSdroutingAaaFeaturePostRequest:
    """
    SD-Routing AAA feature schema for POST/PUT request
    """

    data: SystemAaaData
    name: str
    # Set the feature description
    description: Optional[str]
    metadata: Optional[Any]


class GetSingleSdRoutingSystemAaaSdRoutingPayload:
    # 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]
    # SD-Routing AAA feature schema for POST/PUT request
    payload: Optional[Payload]


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

    id: str
    metadata: Optional[Any]


class SdRoutingSystemAaaData:
    accounting_group: Union[
        OneOfAccountingGroupOptionsDef1,
        OneOfAccountingGroupOptionsDef2,
        OneOfAccountingGroupOptionsDef3,
    ]
    authentication_group: Union[
        OneOfAuthenticationGroupOptionsDef1,
        OneOfAuthenticationGroupOptionsDef2,
        OneOfAuthenticationGroupOptionsDef3,
    ]
    authorization_config_commands: Union[
        OneOfAuthorizationConfigCommandsOptionsDef1,
        OneOfAuthorizationConfigCommandsOptionsDef2,
        OneOfAuthorizationConfigCommandsOptionsDef3,
    ]
    authorization_console: Union[
        OneOfAuthorizationConsoleOptionsDef1,
        OneOfAuthorizationConsoleOptionsDef2,
        OneOfAuthorizationConsoleOptionsDef3,
    ]
    server_auth_order: OneOfServerAuthOrderOptionsDef
    # Configure the accounting rules
    accounting_rule: Optional[List[AccountingRule]]
    # Configure the Authorization Rules
    authorization_rule: Optional[List[AuthorizationRule]]
    # Configure the Radius serverGroup
    radius: Optional[List[Radius]]
    # Configure the TACACS serverGroup
    tacacs: Optional[List[Tacacs]]
    # Create local login account
    user: Optional[List[User]]


class EditSdroutingAaaFeaturePutRequest:
    """
    SD-Routing AAA feature schema for POST/PUT request
    """

    data: SdRoutingSystemAaaData
    name: str
    # Set the feature description
    description: Optional[str]
    metadata: Optional[Any]