# pylint: disable=line-too-long,useless-suppression
# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# Code generated by Microsoft (R) Python Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------

from typing import Any, TYPE_CHECKING, Union
from typing_extensions import Required, TypedDict

if TYPE_CHECKING:
    from .models import (
        CreatedByType,
        EncryptionAtHost,
        FipsValidatedModules,
        ManagedServiceIdentityType,
        OutboundType,
        PreconfiguredNSG,
        ProvisioningState,
        Visibility,
    )


class APIServerProfile(TypedDict, total=False):
    """APIServerProfile represents an API server profile.

    :ivar visibility: API server visibility. Known values are: "Private" and "Public".
    :vartype visibility: Union[str, "Visibility"]
    :ivar url: The URL to access the cluster API server.
    :vartype url: str
    :ivar ip: The IP of the cluster API server.
    :vartype ip: str
    """

    visibility: Union[str, "Visibility"]
    """API server visibility. Known values are: \"Private\" and \"Public\"."""
    url: str
    """The URL to access the cluster API server."""
    ip: str
    """The IP of the cluster API server."""


class ClusterProfile(TypedDict, total=False):
    """ClusterProfile represents a cluster profile.

    :ivar pull_secret: The pull secret for the cluster.
    :vartype pull_secret: str
    :ivar domain: The domain for the cluster.
    :vartype domain: str
    :ivar version: The version of the cluster.
    :vartype version: str
    :ivar resource_group_id: The ID of the cluster resource group.
    :vartype resource_group_id: str
    :ivar fips_validated_modules: If FIPS validated crypto modules are used. Known values are:
     "Disabled" and "Enabled".
    :vartype fips_validated_modules: Union[str, "FipsValidatedModules"]
    :ivar oidc_issuer: The URL of the managed OIDC issuer in a workload identity cluster.
    :vartype oidc_issuer: str
    """

    pullSecret: str
    """The pull secret for the cluster."""
    domain: str
    """The domain for the cluster."""
    version: str
    """The version of the cluster."""
    resourceGroupId: str
    """The ID of the cluster resource group."""
    fipsValidatedModules: Union[str, "FipsValidatedModules"]
    """If FIPS validated crypto modules are used. Known values are: \"Disabled\" and \"Enabled\"."""
    oidcIssuer: str
    """The URL of the managed OIDC issuer in a workload identity cluster."""


class ConsoleProfile(TypedDict, total=False):
    """ConsoleProfile represents a console profile.

    :ivar url: The URL to access the cluster console.
    :vartype url: str
    """

    url: str
    """The URL to access the cluster console."""


class EffectiveOutboundIP(TypedDict, total=False):
    """EffectiveOutboundIP represents an effective outbound IP resource of the cluster public load
    balancer.

    :ivar id: The fully qualified Azure resource id of an IP address resource.
    :vartype id: str
    """

    id: str
    """The fully qualified Azure resource id of an IP address resource."""


class IngressProfile(TypedDict, total=False):
    """IngressProfile represents an ingress profile.

    :ivar name: The ingress profile name.
    :vartype name: str
    :ivar visibility: Ingress visibility. Known values are: "Private" and "Public".
    :vartype visibility: Union[str, "Visibility"]
    :ivar ip: The IP of the ingress.
    :vartype ip: str
    """

    name: str
    """The ingress profile name."""
    visibility: Union[str, "Visibility"]
    """Ingress visibility. Known values are: \"Private\" and \"Public\"."""
    ip: str
    """The IP of the ingress."""


class LoadBalancerProfile(TypedDict, total=False):
    """LoadBalancerProfile represents the profile of the cluster public load balancer.

    :ivar managed_outbound_ips: The desired managed outbound IPs for the cluster public load
     balancer.
    :vartype managed_outbound_ips: "ManagedOutboundIPs"
    :ivar effective_outbound_ips: The list of effective outbound IP addresses of the public load
     balancer.
    :vartype effective_outbound_ips: list["EffectiveOutboundIP"]
    """

    managedOutboundIps: "ManagedOutboundIPs"
    """The desired managed outbound IPs for the cluster public load balancer."""
    effectiveOutboundIps: list["EffectiveOutboundIP"]
    """The list of effective outbound IP addresses of the public load balancer."""


class ManagedOutboundIPs(TypedDict, total=False):
    """ManagedOutboundIPs represents the desired managed outbound IPs for the cluster public load
    balancer.

    :ivar count: Count represents the desired number of IPv4 outbound IPs created and managed by
     Azure for the cluster public load balancer.  Allowed values are in the range of 1 - 20.  The
     default value is 1.
    :vartype count: int
    """

    count: int
    """Count represents the desired number of IPv4 outbound IPs created and managed by Azure for the
     cluster public load balancer.  Allowed values are in the range of 1 - 20.  The default value is
     1."""


class ManagedServiceIdentity(TypedDict, total=False):
    """Managed service identity (system assigned and/or user assigned identities).

    :ivar principal_id: The service principal ID of the system assigned identity. This property
     will only be provided for a system assigned identity.
    :vartype principal_id: str
    :ivar tenant_id: The tenant ID of the system assigned identity. This property will only be
     provided for a system assigned identity.
    :vartype tenant_id: str
    :ivar type: The type of managed identity assigned to this resource. Required. Known values are:
     "None", "SystemAssigned", "UserAssigned", and "SystemAssigned,UserAssigned".
    :vartype type: Union[str, "ManagedServiceIdentityType"]
    :ivar user_assigned_identities: The identities assigned to this resource by the user.
    :vartype user_assigned_identities: dict[str, "UserAssignedIdentity"]
    """

    principalId: str
    """The service principal ID of the system assigned identity. This property will only be provided
     for a system assigned identity."""
    tenantId: str
    """The tenant ID of the system assigned identity. This property will only be provided for a system
     assigned identity."""
    type: Required[Union[str, "ManagedServiceIdentityType"]]
    """The type of managed identity assigned to this resource. Required. Known values are: \"None\",
     \"SystemAssigned\", \"UserAssigned\", and \"SystemAssigned,UserAssigned\"."""
    userAssignedIdentities: dict[str, "UserAssignedIdentity"]
    """The identities assigned to this resource by the user."""


class MasterProfile(TypedDict, total=False):
    """MasterProfile represents a master profile.

    :ivar vm_size: The size of the master VMs.
    :vartype vm_size: str
    :ivar subnet_id: The Azure resource ID of the master subnet.
    :vartype subnet_id: str
    :ivar encryption_at_host: Whether master virtual machines are encrypted at host. Known values
     are: "Disabled" and "Enabled".
    :vartype encryption_at_host: Union[str, "EncryptionAtHost"]
    :ivar disk_encryption_set_id: The resource ID of an associated DiskEncryptionSet, if
     applicable.
    :vartype disk_encryption_set_id: str
    """

    vmSize: str
    """The size of the master VMs."""
    subnetId: str
    """The Azure resource ID of the master subnet."""
    encryptionAtHost: Union[str, "EncryptionAtHost"]
    """Whether master virtual machines are encrypted at host. Known values are: \"Disabled\" and
     \"Enabled\"."""
    diskEncryptionSetId: str
    """The resource ID of an associated DiskEncryptionSet, if applicable."""


class NetworkProfile(TypedDict, total=False):
    """NetworkProfile represents a network profile.

    :ivar pod_cidr: The CIDR used for OpenShift/Kubernetes Pods.
    :vartype pod_cidr: str
    :ivar service_cidr: The CIDR used for OpenShift/Kubernetes Services.
    :vartype service_cidr: str
    :ivar outbound_type: The OutboundType used for egress traffic. Known values are: "Loadbalancer"
     and "UserDefinedRouting".
    :vartype outbound_type: Union[str, "OutboundType"]
    :ivar load_balancer_profile: The cluster load balancer profile.
    :vartype load_balancer_profile: "LoadBalancerProfile"
    :ivar preconfigured_nsg: Specifies whether subnets are pre-attached with an NSG. Known values
     are: "Disabled" and "Enabled".
    :vartype preconfigured_nsg: Union[str, "PreconfiguredNSG"]
    """

    podCidr: str
    """The CIDR used for OpenShift/Kubernetes Pods."""
    serviceCidr: str
    """The CIDR used for OpenShift/Kubernetes Services."""
    outboundType: Union[str, "OutboundType"]
    """The OutboundType used for egress traffic. Known values are: \"Loadbalancer\" and
     \"UserDefinedRouting\"."""
    loadBalancerProfile: "LoadBalancerProfile"
    """The cluster load balancer profile."""
    preconfiguredNSG: Union[str, "PreconfiguredNSG"]
    """Specifies whether subnets are pre-attached with an NSG. Known values are: \"Disabled\" and
     \"Enabled\"."""


class Resource(TypedDict, total=False):
    """Resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    """

    id: str
    """Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}."""
    name: str
    """The name of the resource."""
    type: str
    """The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or
     \"Microsoft.Storage/storageAccounts\"."""
    systemData: "SystemData"
    """Azure Resource Manager metadata containing createdBy and modifiedBy information."""


class TrackedResource(Resource):
    """Tracked Resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    """

    tags: dict[str, str]
    """Resource tags."""
    location: Required[str]
    """The geo-location where the resource lives. Required."""


class OpenShiftCluster(TrackedResource):
    """OpenShiftCluster represents an Azure Red Hat OpenShift cluster.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: The cluster properties.
    :vartype properties: "OpenShiftClusterProperties"
    :ivar identity: The managed service identities assigned to this resource.
    :vartype identity: "ManagedServiceIdentity"
    """

    properties: "OpenShiftClusterProperties"
    """The cluster properties."""
    identity: "ManagedServiceIdentity"
    """The managed service identities assigned to this resource."""


class OpenShiftClusterProperties(TypedDict, total=False):
    """OpenShiftClusterProperties represents an OpenShift cluster's properties.

    :ivar provisioning_state: The cluster provisioning state. Known values are: "AdminUpdating",
     "Canceled", "Creating", "Deleting", "Failed", "Succeeded", and "Updating".
    :vartype provisioning_state: Union[str, "ProvisioningState"]
    :ivar cluster_profile: The cluster profile.
    :vartype cluster_profile: "ClusterProfile"
    :ivar console_profile: The console profile.
    :vartype console_profile: "ConsoleProfile"
    :ivar service_principal_profile: The cluster service principal profile.
    :vartype service_principal_profile: "ServicePrincipalProfile"
    :ivar platform_workload_identity_profile: The workload identity profile.
    :vartype platform_workload_identity_profile: "PlatformWorkloadIdentityProfile"
    :ivar network_profile: The cluster network profile.
    :vartype network_profile: "NetworkProfile"
    :ivar master_profile: The cluster master profile.
    :vartype master_profile: "MasterProfile"
    :ivar worker_profiles: The cluster worker profiles.
    :vartype worker_profiles: list["WorkerProfile"]
    :ivar worker_profiles_status: The cluster worker profiles status.
    :vartype worker_profiles_status: list["WorkerProfile"]
    :ivar apiserver_profile: The cluster API server profile.
    :vartype apiserver_profile: "APIServerProfile"
    :ivar ingress_profiles: The cluster ingress profiles.
    :vartype ingress_profiles: list["IngressProfile"]
    """

    provisioningState: Union[str, "ProvisioningState"]
    """The cluster provisioning state. Known values are: \"AdminUpdating\", \"Canceled\",
     \"Creating\", \"Deleting\", \"Failed\", \"Succeeded\", and \"Updating\"."""
    clusterProfile: "ClusterProfile"
    """The cluster profile."""
    consoleProfile: "ConsoleProfile"
    """The console profile."""
    servicePrincipalProfile: "ServicePrincipalProfile"
    """The cluster service principal profile."""
    platformWorkloadIdentityProfile: "PlatformWorkloadIdentityProfile"
    """The workload identity profile."""
    networkProfile: "NetworkProfile"
    """The cluster network profile."""
    masterProfile: "MasterProfile"
    """The cluster master profile."""
    workerProfiles: list["WorkerProfile"]
    """The cluster worker profiles."""
    workerProfilesStatus: list["WorkerProfile"]
    """The cluster worker profiles status."""
    apiserverProfile: "APIServerProfile"
    """The cluster API server profile."""
    ingressProfiles: list["IngressProfile"]
    """The cluster ingress profiles."""


class OpenShiftClusterUpdate(TypedDict, total=False):
    """OpenShiftCluster represents an Azure Red Hat OpenShift cluster.

    :ivar tags: The resource tags.
    :vartype tags: dict[str, str]
    :ivar properties: The cluster properties.
    :vartype properties: "OpenShiftClusterProperties"
    :ivar identity: Identity stores information about the cluster MSI(s) in a workload identity
     cluster.
    :vartype identity: "ManagedServiceIdentity"
    """

    tags: dict[str, str]
    """The resource tags."""
    properties: "OpenShiftClusterProperties"
    """The cluster properties."""
    identity: "ManagedServiceIdentity"
    """Identity stores information about the cluster MSI(s) in a workload identity cluster."""


class PlatformWorkloadIdentity(TypedDict, total=False):
    """PlatformWorkloadIdentity stores information representing a single workload identity.

    :ivar resource_id: The resource ID of the PlatformWorkloadIdentity resource.
    :vartype resource_id: str
    :ivar client_id: The ClientID of the PlatformWorkloadIdentity resource.
    :vartype client_id: str
    :ivar object_id: The ObjectID of the PlatformWorkloadIdentity resource.
    :vartype object_id: str
    """

    resourceId: str
    """The resource ID of the PlatformWorkloadIdentity resource."""
    clientId: str
    """The ClientID of the PlatformWorkloadIdentity resource."""
    objectId: str
    """The ObjectID of the PlatformWorkloadIdentity resource."""


class PlatformWorkloadIdentityProfile(TypedDict, total=False):
    """PlatformWorkloadIdentityProfile encapsulates all information that is specific to workload
    identity clusters.

    :ivar upgradeable_to: UpgradeableTo stores a single OpenShift version a workload identity
     cluster can be upgraded to.
    :vartype upgradeable_to: str
    :ivar platform_workload_identities: Dictionary of <PlatformWorkloadIdentity>.
    :vartype platform_workload_identities: dict[str, "PlatformWorkloadIdentity"]
    """

    upgradeableTo: str
    """UpgradeableTo stores a single OpenShift version a workload identity cluster can be upgraded to."""
    platformWorkloadIdentities: dict[str, "PlatformWorkloadIdentity"]
    """Dictionary of <PlatformWorkloadIdentity>."""


class ServicePrincipalProfile(TypedDict, total=False):
    """ServicePrincipalProfile represents a service principal profile.

    :ivar client_id: The client ID used for the cluster.
    :vartype client_id: str
    :ivar client_secret: The client secret used for the cluster.
    :vartype client_secret: str
    """

    clientId: str
    """The client ID used for the cluster."""
    clientSecret: str
    """The client secret used for the cluster."""


class SystemData(TypedDict, total=False):
    """Metadata pertaining to creation and last modification of the resource.

    :ivar created_by: The identity that created the resource.
    :vartype created_by: str
    :ivar created_by_type: The type of identity that created the resource. Known values are:
     "User", "Application", "ManagedIdentity", and "Key".
    :vartype created_by_type: Union[str, "CreatedByType"]
    :ivar created_at: The timestamp of resource creation (UTC).
    :vartype created_at: str
    :ivar last_modified_by: The identity that last modified the resource.
    :vartype last_modified_by: str
    :ivar last_modified_by_type: The type of identity that last modified the resource. Known values
     are: "User", "Application", "ManagedIdentity", and "Key".
    :vartype last_modified_by_type: Union[str, "CreatedByType"]
    :ivar last_modified_at: The timestamp of resource last modification (UTC).
    :vartype last_modified_at: str
    """

    createdBy: str
    """The identity that created the resource."""
    createdByType: Union[str, "CreatedByType"]
    """The type of identity that created the resource. Known values are: \"User\", \"Application\",
     \"ManagedIdentity\", and \"Key\"."""
    createdAt: str
    """The timestamp of resource creation (UTC)."""
    lastModifiedBy: str
    """The identity that last modified the resource."""
    lastModifiedByType: Union[str, "CreatedByType"]
    """The type of identity that last modified the resource. Known values are: \"User\",
     \"Application\", \"ManagedIdentity\", and \"Key\"."""
    lastModifiedAt: str
    """The timestamp of resource last modification (UTC)."""


class UserAssignedIdentity(TypedDict, total=False):
    """User assigned identity properties.

    :ivar principal_id: The principal ID of the assigned identity.
    :vartype principal_id: str
    :ivar client_id: The client ID of the assigned identity.
    :vartype client_id: str
    """

    principalId: str
    """The principal ID of the assigned identity."""
    clientId: str
    """The client ID of the assigned identity."""


class WorkerProfile(TypedDict, total=False):
    """WorkerProfile represents a worker profile.

    :ivar name: The worker profile name.
    :vartype name: str
    :ivar vm_size: The size of the worker VMs.
    :vartype vm_size: str
    :ivar disk_size_gb: The disk size of the worker VMs.
    :vartype disk_size_gb: int
    :ivar subnet_id: The Azure resource ID of the worker subnet.
    :vartype subnet_id: str
    :ivar count: The number of worker VMs.
    :vartype count: int
    :ivar encryption_at_host: Whether master virtual machines are encrypted at host. Known values
     are: "Disabled" and "Enabled".
    :vartype encryption_at_host: Union[str, "EncryptionAtHost"]
    :ivar disk_encryption_set_id: The resource ID of an associated DiskEncryptionSet, if
     applicable.
    :vartype disk_encryption_set_id: str
    """

    name: str
    """The worker profile name."""
    vmSize: str
    """The size of the worker VMs."""
    diskSizeGB: int
    """The disk size of the worker VMs."""
    subnetId: str
    """The Azure resource ID of the worker subnet."""
    count: int
    """The number of worker VMs."""
    encryptionAtHost: Union[str, "EncryptionAtHost"]
    """Whether master virtual machines are encrypted at host. Known values are: \"Disabled\" and
     \"Enabled\"."""
    diskEncryptionSetId: str
    """The resource ID of an associated DiskEncryptionSet, if applicable."""
