Models

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

GlobalOptionTypeDef = Literal["global"]

DefaultOptionTypeDef = Literal["default"]

VirtualApplicationApplicationTypeDef = Literal["dreopt"]

VirtualApplicationResourceProfileDef = Literal[
    "default", "extra-large", "large", "medium", "small"
]

VariableOptionTypeDef = Literal["variable"]

DefaultVirtualApplicationResourceProfileDef = Literal["default"]

AppqoeDeviceRoleDef = Literal[
    "forwarder",
    "forwarderAndServiceNode",
    "forwarderAndServiceNodeWithDre",
    "serviceNode",
    "serviceNodeWithDre",
]

DefaultAppnavControllerGroupDef = Literal["ACG-APPQOE"]

DefaultServiceNodeGroupDef = Literal["SNG-APPQOE"]

AppnavControllerGroupAppnavControllersDefaultAddressDef = Literal[
    "192.168.2.1"
]

DefaultExternalServiceNodeAddressDef = Literal["192.168.2.2"]

DefaultExternalServiceNodeVpgIpDef = Literal["192.168.2.1/24"]


class OneOfDreoptOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: bool


class OneOfDreoptOptionsDef2:
    option_type: DefaultOptionTypeDef
    value: bool


class OneOfVirtualApplicationInstanceIdOptionsDef:
    option_type: GlobalOptionTypeDef
    value: int


class OneOfVirtualApplicationApplicationTypeOptionsDef:
    option_type: GlobalOptionTypeDef
    value: VirtualApplicationApplicationTypeDef


class OneOfVirtualApplicationResourceProfileOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: VirtualApplicationResourceProfileDef


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


class OneOfVirtualApplicationResourceProfileOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: DefaultVirtualApplicationResourceProfileDef  # pytype: disable=annotation-type-mismatch


class VirtualApplication:
    instance_id: OneOfVirtualApplicationInstanceIdOptionsDef
    application_type: Optional[
        OneOfVirtualApplicationApplicationTypeOptionsDef
    ]
    resource_profile: Optional[
        Union[
            OneOfVirtualApplicationResourceProfileOptionsDef1,
            OneOfVirtualApplicationResourceProfileOptionsDef2,
            OneOfVirtualApplicationResourceProfileOptionsDef3,
        ]
    ]


class OneOfAppqoeDeviceRoleOptionsDef:
    option_type: GlobalOptionTypeDef
    value: AppqoeDeviceRoleDef


class OneOfAppqoeNameOptionsDef:
    option_type: DefaultOptionTypeDef
    value: str


class OneOfAppqoeAppnavControllerGroupOptionsDef:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfAppqoeServiceNodeGroupOptionsDef:
    option_type: GlobalOptionTypeDef
    value: str


class ServiceNodeGroups:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfAppqoeEnableOptionsDef:
    option_type: GlobalOptionTypeDef
    value: bool


class OneOfAppqoeVpnOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class OneOfAppqoeVpnOptionsDef2:
    option_type: DefaultOptionTypeDef


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


class Appqoe:
    name: OneOfAppqoeNameOptionsDef
    appnav_controller_group: Optional[
        OneOfAppqoeAppnavControllerGroupOptionsDef
    ]
    enable: Optional[OneOfAppqoeEnableOptionsDef]
    service_node_group: Optional[
        OneOfAppqoeServiceNodeGroupOptionsDef
    ]
    # Service node group
    service_node_groups: Optional[List[ServiceNodeGroups]]
    vpn: Optional[
        Union[
            OneOfAppqoeVpnOptionsDef1,
            OneOfAppqoeVpnOptionsDef2,
            OneOfAppqoeVpnOptionsDef3,
        ]
    ]


class ServiceContext:
    """
    Service Context
    """

    # Appqoe
    appqoe: Optional[List[Appqoe]]


class Forwarder1:
    appnav_controller_group: Any
    service_node_group: Any
    # Service Context
    service_context: Optional[ServiceContext]


class OneOfAppnavControllerGroupGroupNameOptionsDef:
    option_type: DefaultOptionTypeDef
    value: DefaultAppnavControllerGroupDef


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


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


class OneOfAppnavControllerGroupAppnavControllersVpnOptionsDef:
    option_type: GlobalOptionTypeDef
    value: int


class AppnavControllers:
    address: Union[
        OneOfAppnavControllerGroupAppnavControllersAddressOptionsDef1,
        OneOfAppnavControllerGroupAppnavControllersAddressOptionsDef2,
    ]
    vpn: Optional[
        OneOfAppnavControllerGroupAppnavControllersVpnOptionsDef
    ]


class AppnavControllerGroup:
    group_name: OneOfAppnavControllerGroupGroupNameOptionsDef
    # List of controllers
    appnav_controllers: Optional[List[AppnavControllers]]


class OneOfServiceNodeGroupNameOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfServiceNodeGroupNameOptionsDef2:
    option_type: DefaultOptionTypeDef
    value: DefaultServiceNodeGroupDef  # pytype: disable=annotation-type-mismatch


class OneOfDefaultFalseServiceNodeGroupInternalOptionsDef:
    option_type: DefaultOptionTypeDef
    value: bool


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


class ServiceNode:
    address: OneOfServiceNodeGroupServiceNodeAddressOptionsDef


class ServiceNodeGroup:
    name: Union[
        OneOfServiceNodeGroupNameOptionsDef1,
        OneOfServiceNodeGroupNameOptionsDef2,
    ]
    internal: Optional[
        OneOfDefaultFalseServiceNodeGroupInternalOptionsDef
    ]
    # Service Node Information
    service_node: Optional[List[ServiceNode]]


class Forwarder2:
    # Appnav controller group name
    appnav_controller_group: Optional[List[AppnavControllerGroup]]
    # Service Context
    service_context: Optional[ServiceContext]
    # Name
    service_node_group: Optional[List[ServiceNodeGroup]]


class OneOfAppnavControllerGroupAppnavControllersDefaultAddressOptionsDef:
    option_type: DefaultOptionTypeDef
    value: AppnavControllerGroupAppnavControllersDefaultAddressDef  # pytype: disable=annotation-type-mismatch


class AppqoeAppnavControllers:
    address: OneOfAppnavControllerGroupAppnavControllersDefaultAddressOptionsDef


class AppqoeAppnavControllerGroup:
    group_name: OneOfAppnavControllerGroupGroupNameOptionsDef
    # List of controllers
    appnav_controllers: Optional[List[AppqoeAppnavControllers]]


class OneOfDefaultServiceNodeGroupNameOptionsDef:
    option_type: DefaultOptionTypeDef
    value: DefaultServiceNodeGroupDef  # pytype: disable=annotation-type-mismatch


class OneOfDefaultTrueServiceNodeGroupInternalOptionsDef:
    option_type: DefaultOptionTypeDef
    value: bool


class OneOfDefaultExternalServiceNodeGroupServiceNodeAddressOptionsDef:
    option_type: DefaultOptionTypeDef
    value: DefaultExternalServiceNodeAddressDef  # pytype: disable=annotation-type-mismatch


class AppqoeServiceNode:
    address: OneOfDefaultExternalServiceNodeGroupServiceNodeAddressOptionsDef


class AppqoeServiceNodeGroup:
    name: OneOfDefaultServiceNodeGroupNameOptionsDef
    internal: Optional[
        OneOfDefaultTrueServiceNodeGroupInternalOptionsDef
    ]
    # Service Node Information
    service_node: Optional[List[AppqoeServiceNode]]


class ForwarderAndServiceNode:
    """
    Appqoe Device Role Forwarder And ServiceNode
    """

    # Appnav controller group name
    appnav_controller_group: Optional[
        List[AppqoeAppnavControllerGroup]
    ]
    # Service Context
    service_context: Optional[ServiceContext]
    # Name
    service_node_group: Optional[List[AppqoeServiceNodeGroup]]


class OneOfServiceNodeGroupExternalNodeOptionsDef:
    option_type: DefaultOptionTypeDef
    value: bool


class OneOfServiceNodeGroupServiceNodeVpgIpOptionsDef:
    option_type: DefaultOptionTypeDef
    value: DefaultExternalServiceNodeVpgIpDef  # pytype: disable=annotation-type-mismatch


class SdwanServiceAppqoeServiceNode:
    address: OneOfDefaultExternalServiceNodeGroupServiceNodeAddressOptionsDef
    vpg_ip: Optional[OneOfServiceNodeGroupServiceNodeVpgIpOptionsDef]


class ServiceAppqoeServiceNodeGroup:
    name: OneOfDefaultServiceNodeGroupNameOptionsDef
    external_node: Optional[
        OneOfServiceNodeGroupExternalNodeOptionsDef
    ]
    # Service Node Information
    service_node: Optional[List[SdwanServiceAppqoeServiceNode]]


class ServiceAppqoeServiceNode:
    """
    Appqoe Device Role ServiceNode
    """

    # Name
    service_node_group: Optional[List[ServiceAppqoeServiceNodeGroup]]


class AppqoeData:
    appqoe_device_role: OneOfAppqoeDeviceRoleOptionsDef
    dreopt: Optional[
        Union[OneOfDreoptOptionsDef1, OneOfDreoptOptionsDef2]
    ]
    # Appqoe Device Role Forwarder
    forwarder: Optional[Union[Forwarder1, Forwarder2]]
    # Appqoe Device Role Forwarder And ServiceNode
    forwarder_and_service_node: Optional[ForwarderAndServiceNode]
    # Appqoe Device Role ServiceNode
    service_node: Optional[ServiceAppqoeServiceNode]
    # Virtual application Instance
    virtual_application: Optional[List[VirtualApplication]]


class Payload:
    """
    Appqoe profile feature schema for request
    """

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


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]
    # Appqoe profile feature schema for request
    payload: Optional[Payload]


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


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

    parcel_id: str
    metadata: Optional[Any]


class V1FeatureProfileSdwanServiceAppqoeServiceNode:
    address: OneOfDefaultExternalServiceNodeGroupServiceNodeAddressOptionsDef
    vpg_ip: Optional[OneOfServiceNodeGroupServiceNodeVpgIpOptionsDef]


class SdwanServiceAppqoeServiceNodeGroup:
    name: OneOfDefaultServiceNodeGroupNameOptionsDef
    external_node: Optional[
        OneOfServiceNodeGroupExternalNodeOptionsDef
    ]
    # Service Node Information
    service_node: Optional[
        List[V1FeatureProfileSdwanServiceAppqoeServiceNode]
    ]


class FeatureProfileSdwanServiceAppqoeServiceNode:
    """
    Appqoe Device Role ServiceNode
    """

    # Name
    service_node_group: Optional[
        List[SdwanServiceAppqoeServiceNodeGroup]
    ]


class ServiceAppqoeData:
    appqoe_device_role: OneOfAppqoeDeviceRoleOptionsDef
    dreopt: Optional[
        Union[OneOfDreoptOptionsDef1, OneOfDreoptOptionsDef2]
    ]
    # Appqoe Device Role Forwarder
    forwarder: Optional[Union[Forwarder1, Forwarder2]]
    # Appqoe Device Role Forwarder And ServiceNode
    forwarder_and_service_node: Optional[ForwarderAndServiceNode]
    # Appqoe Device Role ServiceNode
    service_node: Optional[
        FeatureProfileSdwanServiceAppqoeServiceNode
    ]
    # Virtual application Instance
    virtual_application: Optional[List[VirtualApplication]]


class CreateAppqoeProfileParcelForServicePostRequest:
    """
    Appqoe profile feature schema for request
    """

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


class GetSingleSdwanServiceAppqoePayload:
    # 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]
    # Appqoe profile feature schema for request
    payload: Optional[Payload]


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

    id: str
    metadata: Optional[Any]


class ServiceNode2:
    address: OneOfDefaultExternalServiceNodeGroupServiceNodeAddressOptionsDef
    vpg_ip: Optional[OneOfServiceNodeGroupServiceNodeVpgIpOptionsDef]


class FeatureProfileSdwanServiceAppqoeServiceNodeGroup:
    name: OneOfDefaultServiceNodeGroupNameOptionsDef
    external_node: Optional[
        OneOfServiceNodeGroupExternalNodeOptionsDef
    ]
    # Service Node Information
    service_node: Optional[List[ServiceNode2]]


class ServiceNode1:
    """
    Appqoe Device Role ServiceNode
    """

    # Name
    service_node_group: Optional[
        List[FeatureProfileSdwanServiceAppqoeServiceNodeGroup]
    ]


class SdwanServiceAppqoeData:
    appqoe_device_role: OneOfAppqoeDeviceRoleOptionsDef
    dreopt: Optional[
        Union[OneOfDreoptOptionsDef1, OneOfDreoptOptionsDef2]
    ]
    # Appqoe Device Role Forwarder
    forwarder: Optional[Union[Forwarder1, Forwarder2]]
    # Appqoe Device Role Forwarder And ServiceNode
    forwarder_and_service_node: Optional[ForwarderAndServiceNode]
    # Appqoe Device Role ServiceNode
    service_node: Optional[ServiceNode1]
    # Virtual application Instance
    virtual_application: Optional[List[VirtualApplication]]


class EditAppqoeProfileParcelForServicePutRequest:
    """
    Appqoe profile feature schema for request
    """

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