Models

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

GlobalOptionTypeDef = Literal["global"]

VariableOptionTypeDef = Literal["variable"]

DefaultOptionTypeDef = Literal["default"]

RoleDef = Literal["border-router", "edge-router"]

EnableMrfMigrationDef = Literal["enabled", "enabled-from-bgp-core"]


class OneOfSecondaryRegionOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


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


class OneOfSecondaryRegionOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfRoleOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: RoleDef  # pytype: disable=annotation-type-mismatch


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


class OneOfRoleOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfEnableMrfMigrationOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: EnableMrfMigrationDef  # pytype: disable=annotation-type-mismatch


class OneOfEnableMrfMigrationOptionsDef2:
    option_type: DefaultOptionTypeDef


class OneOfMigrationBgpCommunityOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class OneOfMigrationBgpCommunityOptionsDef2:
    option_type: DefaultOptionTypeDef


class OneOfEnableManagemantRegionOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: bool


class OneOfEnableManagemantRegionOptionsDef2:
    option_type: DefaultOptionTypeDef
    value: bool


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


class OneOfVrfIdOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class OneOfVrfIdOptionsDef2:
    option_type: DefaultOptionTypeDef


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


class OneOfGatewayPreferenceOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: List[int]


class OneOfGatewayPreferenceOptionsDef2:
    option_type: DefaultOptionTypeDef


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


class OneOfManagementGatewayOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: bool


class OneOfManagementGatewayOptionsDef2:
    option_type: DefaultOptionTypeDef
    value: bool


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


class ManagementRegion:
    """
    Management Region
    """

    gateway_preference: Optional[
        Union[
            OneOfGatewayPreferenceOptionsDef1,
            OneOfGatewayPreferenceOptionsDef2,
            OneOfGatewayPreferenceOptionsDef3,
        ]
    ]
    management_gateway: Optional[
        Union[
            OneOfManagementGatewayOptionsDef1,
            OneOfManagementGatewayOptionsDef2,
            OneOfManagementGatewayOptionsDef3,
        ]
    ]
    vrf_id: Optional[
        Union[
            OneOfVrfIdOptionsDef1,
            OneOfVrfIdOptionsDef2,
            OneOfVrfIdOptionsDef3,
        ]
    ]


class MrfData:
    enable_management_region: Optional[
        Union[
            OneOfEnableManagemantRegionOptionsDef1,
            OneOfEnableManagemantRegionOptionsDef2,
            OneOfEnableManagemantRegionOptionsDef3,
        ]
    ]
    enable_mrf_migration: Optional[
        Union[
            OneOfEnableMrfMigrationOptionsDef1,
            OneOfEnableMrfMigrationOptionsDef2,
        ]
    ]
    # Management Region
    management_region: Optional[ManagementRegion]
    migration_bgp_community: Optional[
        Union[
            OneOfMigrationBgpCommunityOptionsDef1,
            OneOfMigrationBgpCommunityOptionsDef2,
        ]
    ]
    role: Optional[
        Union[
            OneOfRoleOptionsDef1,
            OneOfRoleOptionsDef2,
            OneOfRoleOptionsDef3,
        ]
    ]
    secondary_region: Optional[
        Union[
            OneOfSecondaryRegionOptionsDef1,
            OneOfSecondaryRegionOptionsDef2,
            OneOfSecondaryRegionOptionsDef3,
        ]
    ]


class Payload:
    """
    mrf profile parcel schema for POST request
    """

    data: MrfData
    name: str
    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]
    # mrf profile parcel schema for POST request
    payload: Optional[Payload]


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


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

    parcel_id: str
    metadata: Optional[Any]


class SystemMrfData:
    enable_management_region: Optional[
        Union[
            OneOfEnableManagemantRegionOptionsDef1,
            OneOfEnableManagemantRegionOptionsDef2,
            OneOfEnableManagemantRegionOptionsDef3,
        ]
    ]
    enable_mrf_migration: Optional[
        Union[
            OneOfEnableMrfMigrationOptionsDef1,
            OneOfEnableMrfMigrationOptionsDef2,
        ]
    ]
    # Management Region
    management_region: Optional[ManagementRegion]
    migration_bgp_community: Optional[
        Union[
            OneOfMigrationBgpCommunityOptionsDef1,
            OneOfMigrationBgpCommunityOptionsDef2,
        ]
    ]
    role: Optional[
        Union[
            OneOfRoleOptionsDef1,
            OneOfRoleOptionsDef2,
            OneOfRoleOptionsDef3,
        ]
    ]
    secondary_region: Optional[
        Union[
            OneOfSecondaryRegionOptionsDef1,
            OneOfSecondaryRegionOptionsDef2,
            OneOfSecondaryRegionOptionsDef3,
        ]
    ]


class CreateMrfProfileParcelForSystemPostRequest:
    """
    mrf profile parcel schema for POST request
    """

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


class GetSingleSdwanSystemMrfPayload:
    # 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]
    # mrf profile parcel schema for POST request
    payload: Optional[Payload]


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

    id: str
    metadata: Optional[Any]


class SdwanSystemMrfData:
    enable_management_region: Optional[
        Union[
            OneOfEnableManagemantRegionOptionsDef1,
            OneOfEnableManagemantRegionOptionsDef2,
            OneOfEnableManagemantRegionOptionsDef3,
        ]
    ]
    enable_mrf_migration: Optional[
        Union[
            OneOfEnableMrfMigrationOptionsDef1,
            OneOfEnableMrfMigrationOptionsDef2,
        ]
    ]
    # Management Region
    management_region: Optional[ManagementRegion]
    migration_bgp_community: Optional[
        Union[
            OneOfMigrationBgpCommunityOptionsDef1,
            OneOfMigrationBgpCommunityOptionsDef2,
        ]
    ]
    role: Optional[
        Union[
            OneOfRoleOptionsDef1,
            OneOfRoleOptionsDef2,
            OneOfRoleOptionsDef3,
        ]
    ]
    secondary_region: Optional[
        Union[
            OneOfSecondaryRegionOptionsDef1,
            OneOfSecondaryRegionOptionsDef2,
            OneOfSecondaryRegionOptionsDef3,
        ]
    ]


class EditMrfProfileParcelForSystemPutRequest:
    """
    mrf profile parcel schema for POST request
    """

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