Models

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

GlobalOptionTypeDef = Literal["global"]

VariableOptionTypeDef = Literal["variable"]

UserRoleDef = Literal["administrators", "auditors", "operators"]

AuthOrderAuthenticationDef = Literal["local", "tacacs"]

TacacsKeyEnumDef = Literal["0", "7"]

DefaultOptionTypeDef = Literal["default"]

Value = Literal["0"]

RadiusKeyEnumDef = Literal["0", "7"]

AaaUserRoleDef = Literal["administrators", "auditors", "operators"]

AaaAuthOrderAuthenticationDef = Literal["local", "tacacs"]

AaaTacacsKeyEnumDef = Literal["0", "7"]

AaaRadiusKeyEnumDef = Literal["0", "7"]

SystemAaaUserRoleDef = Literal[
    "administrators", "auditors", "operators"
]

SystemAaaAuthOrderAuthenticationDef = Literal["local", "tacacs"]

SystemAaaTacacsKeyEnumDef = Literal["0", "7"]

SystemAaaRadiusKeyEnumDef = Literal["0", "7"]


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

    parcel_id: str
    metadata: Optional[Any]


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 OneOfUserRoleOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: UserRoleDef  # pytype: disable=annotation-type-mismatch


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


class User:
    name: Union[OneOfUserNameOptionsDef1, OneOfUserNameOptionsDef2]
    nfvis_password: Union[
        OneOfUserPasswordOptionsDef1, OneOfUserPasswordOptionsDef2
    ]
    role: Union[OneOfUserRoleOptionsDef1, OneOfUserRoleOptionsDef2]


class OneOfAuthOrderAuthenticationOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: AuthOrderAuthenticationDef  # pytype: disable=annotation-type-mismatch


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


class AuthOrder:
    authentication: Union[
        OneOfAuthOrderAuthenticationOptionsDef1,
        OneOfAuthOrderAuthenticationOptionsDef2,
    ]


class OneOfTacacsHostOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: Any


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


class OneOfTacacsKeyEnumOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: TacacsKeyEnumDef


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


class OneOfTacacsKeyEnumOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: Value  # pytype: disable=annotation-type-mismatch


class OneOfTacacsSharedSecretOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfTacacsAdminPrivOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfTacacsAdminPrivOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class OneOfTacacsOperPrivOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfTacacsOperPrivOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class Tacacs:
    host: Union[
        OneOfTacacsHostOptionsDef1, OneOfTacacsHostOptionsDef2
    ]
    shared_secret: Union[
        OneOfTacacsSharedSecretOptionsDef1,
        OneOfTacacsSharedSecretOptionsDef2,
    ]
    admin_priv: Optional[
        Union[
            OneOfTacacsAdminPrivOptionsDef1,
            OneOfTacacsAdminPrivOptionsDef2,
            OneOfTacacsAdminPrivOptionsDef3,
        ]
    ]
    key: Optional[
        Union[
            OneOfTacacsKeyEnumOptionsDef1,
            OneOfTacacsKeyEnumOptionsDef2,
            OneOfTacacsKeyEnumOptionsDef3,
        ]
    ]
    oper_priv: Optional[
        Union[
            OneOfTacacsOperPrivOptionsDef1,
            OneOfTacacsOperPrivOptionsDef2,
            OneOfTacacsOperPrivOptionsDef3,
        ]
    ]


class OneOfRadiusHostOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: Any


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


class OneOfRadiusKeyEnumOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: RadiusKeyEnumDef


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


class OneOfRadiusKeyEnumOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: Value  # pytype: disable=annotation-type-mismatch


class OneOfRadiusSharedSecretOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


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


class OneOfRadiusAdminPrivOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfRadiusAdminPrivOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class OneOfRadiusOperPrivOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfRadiusOperPrivOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int


class Radius:
    host: Union[
        OneOfRadiusHostOptionsDef1, OneOfRadiusHostOptionsDef2
    ]
    shared_secret: Union[
        OneOfRadiusSharedSecretOptionsDef1,
        OneOfRadiusSharedSecretOptionsDef2,
    ]
    admin_priv: Optional[
        Union[
            OneOfRadiusAdminPrivOptionsDef1,
            OneOfRadiusAdminPrivOptionsDef2,
            OneOfRadiusAdminPrivOptionsDef3,
        ]
    ]
    key: Optional[
        Union[
            OneOfRadiusKeyEnumOptionsDef1,
            OneOfRadiusKeyEnumOptionsDef2,
            OneOfRadiusKeyEnumOptionsDef3,
        ]
    ]
    oper_priv: Optional[
        Union[
            OneOfRadiusOperPrivOptionsDef1,
            OneOfRadiusOperPrivOptionsDef2,
            OneOfRadiusOperPrivOptionsDef3,
        ]
    ]


class Data:
    # Set order to try different authentication methods
    auth_order: Optional[List[AuthOrder]]
    # Configure the RADIUS server
    radius: Optional[List[Radius]]
    # Configure the TACACS server
    tacacs: Optional[List[Tacacs]]
    # Create local login account
    user: Optional[List[User]]


class CreateNfvirtualAaaParcelPostRequest:
    """
    AAA profile parcel schema for POST request
    """

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


class AaaOneOfUserNameOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


class AaaOneOfUserPasswordOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


class AaaOneOfUserRoleOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: AaaUserRoleDef  # pytype: disable=annotation-type-mismatch


class AaaUser:
    name: Union[AaaOneOfUserNameOptionsDef1, OneOfUserNameOptionsDef2]
    nfvis_password: Union[
        AaaOneOfUserPasswordOptionsDef1, OneOfUserPasswordOptionsDef2
    ]
    role: Union[AaaOneOfUserRoleOptionsDef1, OneOfUserRoleOptionsDef2]


class AaaOneOfAuthOrderAuthenticationOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: AaaAuthOrderAuthenticationDef  # pytype: disable=annotation-type-mismatch


class AaaAuthOrder:
    authentication: Union[
        AaaOneOfAuthOrderAuthenticationOptionsDef1,
        OneOfAuthOrderAuthenticationOptionsDef2,
    ]


class AaaOneOfTacacsHostOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: Any


class AaaOneOfTacacsKeyEnumOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: AaaTacacsKeyEnumDef


class AaaOneOfTacacsSharedSecretOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


class AaaOneOfTacacsAdminPrivOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class AaaOneOfTacacsOperPrivOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class AaaTacacs:
    host: Union[
        AaaOneOfTacacsHostOptionsDef1, OneOfTacacsHostOptionsDef2
    ]
    shared_secret: Union[
        AaaOneOfTacacsSharedSecretOptionsDef1,
        OneOfTacacsSharedSecretOptionsDef2,
    ]
    admin_priv: Optional[
        Union[
            AaaOneOfTacacsAdminPrivOptionsDef1,
            OneOfTacacsAdminPrivOptionsDef2,
            OneOfTacacsAdminPrivOptionsDef3,
        ]
    ]
    key: Optional[
        Union[
            AaaOneOfTacacsKeyEnumOptionsDef1,
            OneOfTacacsKeyEnumOptionsDef2,
            OneOfTacacsKeyEnumOptionsDef3,
        ]
    ]
    oper_priv: Optional[
        Union[
            AaaOneOfTacacsOperPrivOptionsDef1,
            OneOfTacacsOperPrivOptionsDef2,
            OneOfTacacsOperPrivOptionsDef3,
        ]
    ]


class AaaOneOfRadiusHostOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: Any


class AaaOneOfRadiusKeyEnumOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: AaaRadiusKeyEnumDef


class AaaOneOfRadiusSharedSecretOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


class AaaOneOfRadiusAdminPrivOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class AaaOneOfRadiusOperPrivOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class AaaRadius:
    host: Union[
        AaaOneOfRadiusHostOptionsDef1, OneOfRadiusHostOptionsDef2
    ]
    shared_secret: Union[
        AaaOneOfRadiusSharedSecretOptionsDef1,
        OneOfRadiusSharedSecretOptionsDef2,
    ]
    admin_priv: Optional[
        Union[
            AaaOneOfRadiusAdminPrivOptionsDef1,
            OneOfRadiusAdminPrivOptionsDef2,
            OneOfRadiusAdminPrivOptionsDef3,
        ]
    ]
    key: Optional[
        Union[
            AaaOneOfRadiusKeyEnumOptionsDef1,
            OneOfRadiusKeyEnumOptionsDef2,
            OneOfRadiusKeyEnumOptionsDef3,
        ]
    ]
    oper_priv: Optional[
        Union[
            AaaOneOfRadiusOperPrivOptionsDef1,
            OneOfRadiusOperPrivOptionsDef2,
            OneOfRadiusOperPrivOptionsDef3,
        ]
    ]


class AaaData:
    # Set order to try different authentication methods
    auth_order: Optional[List[AaaAuthOrder]]
    # Configure the RADIUS server
    radius: Optional[List[AaaRadius]]
    # Configure the TACACS server
    tacacs: Optional[List[AaaTacacs]]
    # Create local login account
    user: Optional[List[AaaUser]]


class Payload:
    """
    AAA profile parcel schema for PUT request
    """

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


class GetSingleNfvirtualSystemAaaPayload:
    # 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]
    # AAA profile parcel schema for PUT request
    payload: Optional[Payload]


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

    id: str
    metadata: Optional[Any]


class SystemAaaOneOfUserNameOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


class SystemAaaOneOfUserPasswordOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


class SystemAaaOneOfUserRoleOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: SystemAaaUserRoleDef  # pytype: disable=annotation-type-mismatch


class SystemAaaUser:
    name: Union[
        SystemAaaOneOfUserNameOptionsDef1, OneOfUserNameOptionsDef2
    ]
    nfvis_password: Union[
        SystemAaaOneOfUserPasswordOptionsDef1,
        OneOfUserPasswordOptionsDef2,
    ]
    role: Union[
        SystemAaaOneOfUserRoleOptionsDef1, OneOfUserRoleOptionsDef2
    ]


class SystemAaaOneOfAuthOrderAuthenticationOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: SystemAaaAuthOrderAuthenticationDef  # pytype: disable=annotation-type-mismatch


class SystemAaaAuthOrder:
    authentication: Union[
        SystemAaaOneOfAuthOrderAuthenticationOptionsDef1,
        OneOfAuthOrderAuthenticationOptionsDef2,
    ]


class SystemAaaOneOfTacacsHostOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: Any


class SystemAaaOneOfTacacsKeyEnumOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: SystemAaaTacacsKeyEnumDef


class SystemAaaOneOfTacacsSharedSecretOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


class SystemAaaOneOfTacacsAdminPrivOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class SystemAaaOneOfTacacsOperPrivOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class SystemAaaTacacs:
    host: Union[
        SystemAaaOneOfTacacsHostOptionsDef1,
        OneOfTacacsHostOptionsDef2,
    ]
    shared_secret: Union[
        SystemAaaOneOfTacacsSharedSecretOptionsDef1,
        OneOfTacacsSharedSecretOptionsDef2,
    ]
    admin_priv: Optional[
        Union[
            SystemAaaOneOfTacacsAdminPrivOptionsDef1,
            OneOfTacacsAdminPrivOptionsDef2,
            OneOfTacacsAdminPrivOptionsDef3,
        ]
    ]
    key: Optional[
        Union[
            SystemAaaOneOfTacacsKeyEnumOptionsDef1,
            OneOfTacacsKeyEnumOptionsDef2,
            OneOfTacacsKeyEnumOptionsDef3,
        ]
    ]
    oper_priv: Optional[
        Union[
            SystemAaaOneOfTacacsOperPrivOptionsDef1,
            OneOfTacacsOperPrivOptionsDef2,
            OneOfTacacsOperPrivOptionsDef3,
        ]
    ]


class SystemAaaOneOfRadiusHostOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: Any


class SystemAaaOneOfRadiusKeyEnumOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: SystemAaaRadiusKeyEnumDef


class SystemAaaOneOfRadiusSharedSecretOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


class SystemAaaOneOfRadiusAdminPrivOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class SystemAaaOneOfRadiusOperPrivOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class SystemAaaRadius:
    host: Union[
        SystemAaaOneOfRadiusHostOptionsDef1,
        OneOfRadiusHostOptionsDef2,
    ]
    shared_secret: Union[
        SystemAaaOneOfRadiusSharedSecretOptionsDef1,
        OneOfRadiusSharedSecretOptionsDef2,
    ]
    admin_priv: Optional[
        Union[
            SystemAaaOneOfRadiusAdminPrivOptionsDef1,
            OneOfRadiusAdminPrivOptionsDef2,
            OneOfRadiusAdminPrivOptionsDef3,
        ]
    ]
    key: Optional[
        Union[
            SystemAaaOneOfRadiusKeyEnumOptionsDef1,
            OneOfRadiusKeyEnumOptionsDef2,
            OneOfRadiusKeyEnumOptionsDef3,
        ]
    ]
    oper_priv: Optional[
        Union[
            SystemAaaOneOfRadiusOperPrivOptionsDef1,
            OneOfRadiusOperPrivOptionsDef2,
            OneOfRadiusOperPrivOptionsDef3,
        ]
    ]


class SystemAaaData:
    # Set order to try different authentication methods
    auth_order: Optional[List[SystemAaaAuthOrder]]
    # Configure the RADIUS server
    radius: Optional[List[SystemAaaRadius]]
    # Configure the TACACS server
    tacacs: Optional[List[SystemAaaTacacs]]
    # Create local login account
    user: Optional[List[SystemAaaUser]]


class EditNfvirtualAaaParcelPutRequest:
    """
    AAA profile parcel schema for PUT request
    """

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