# pylint: disable=line-too-long,useless-suppression,too-many-lines
# 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.
# --------------------------------------------------------------------------
# pylint: disable=useless-super-delegation

import datetime
from typing import Any, Mapping, Optional, TYPE_CHECKING, Union, overload

from .._utils.model_base import Model as _Model, rest_field

if TYPE_CHECKING:
    from .. import models as _models


class APIServerProfile(_Model):
    """APIServerProfile represents an API server profile.

    :ivar visibility: API server visibility. Known values are: "Private" and "Public".
    :vartype visibility: str or ~azure.mgmt.redhatopenshift.models.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: Optional[Union[str, "_models.Visibility"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """API server visibility. Known values are: \"Private\" and \"Public\"."""
    url: Optional[str] = rest_field(visibility=["read"])
    """The URL to access the cluster API server."""
    ip: Optional[str] = rest_field(visibility=["read"])
    """The IP of the cluster API server."""

    @overload
    def __init__(
        self,
        *,
        visibility: Optional[Union[str, "_models.Visibility"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CloudError(_Model):
    """CloudError represents a cloud error.

    :ivar error: An error response from the service.
    :vartype error: ~azure.mgmt.redhatopenshift.models.CloudErrorBody
    """

    error: Optional["_models.CloudErrorBody"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """An error response from the service."""

    @overload
    def __init__(
        self,
        *,
        error: Optional["_models.CloudErrorBody"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CloudErrorBody(_Model):
    """CloudErrorBody represents the body of a cloud error.

    :ivar code: An identifier for the error. Codes are invariant and are intended to be consumed
     programmatically.
    :vartype code: str
    :ivar message: A message describing the error, intended to be suitable for display in a user
     interface.
    :vartype message: str
    :ivar target: The target of the particular error. For example, the name of the property in
     error.
    :vartype target: str
    :ivar details: A list of additional details about the error.
    :vartype details: list[~azure.mgmt.redhatopenshift.models.CloudErrorBody]
    """

    code: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """An identifier for the error. Codes are invariant and are intended to be consumed
     programmatically."""
    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """A message describing the error, intended to be suitable for display in a user interface."""
    target: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The target of the particular error. For example, the name of the property in error."""
    details: Optional[list["_models.CloudErrorBody"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """A list of additional details about the error."""

    @overload
    def __init__(
        self,
        *,
        code: Optional[str] = None,
        message: Optional[str] = None,
        target: Optional[str] = None,
        details: Optional[list["_models.CloudErrorBody"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ClusterProfile(_Model):
    """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: str or ~azure.mgmt.redhatopenshift.models.FipsValidatedModules
    :ivar oidc_issuer: The URL of the managed OIDC issuer in a workload identity cluster.
    :vartype oidc_issuer: str
    """

    pull_secret: Optional[str] = rest_field(
        name="pullSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """The pull secret for the cluster."""
    domain: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The domain for the cluster."""
    version: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The version of the cluster."""
    resource_group_id: Optional[str] = rest_field(
        name="resourceGroupId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The ID of the cluster resource group."""
    fips_validated_modules: Optional[Union[str, "_models.FipsValidatedModules"]] = rest_field(
        name="fipsValidatedModules", visibility=["read", "create", "update", "delete", "query"]
    )
    """If FIPS validated crypto modules are used. Known values are: \"Disabled\" and \"Enabled\"."""
    oidc_issuer: Optional[str] = rest_field(name="oidcIssuer", visibility=["read"])
    """The URL of the managed OIDC issuer in a workload identity cluster."""

    @overload
    def __init__(
        self,
        *,
        pull_secret: Optional[str] = None,
        domain: Optional[str] = None,
        version: Optional[str] = None,
        resource_group_id: Optional[str] = None,
        fips_validated_modules: Optional[Union[str, "_models.FipsValidatedModules"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ConsoleProfile(_Model):
    """ConsoleProfile represents a console profile.

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

    url: Optional[str] = rest_field(visibility=["read"])
    """The URL to access the cluster console."""


class Display(_Model):
    """Display represents the display details of an operation.

    :ivar provider: Friendly name of the resource provider.
    :vartype provider: str
    :ivar resource: Resource type on which the operation is performed.
    :vartype resource: str
    :ivar operation: Operation type: read, write, delete, listKeys/action, etc.
    :vartype operation: str
    :ivar description: Friendly name of the operation.
    :vartype description: str
    """

    provider: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Friendly name of the resource provider."""
    resource: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Resource type on which the operation is performed."""
    operation: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Operation type: read, write, delete, listKeys/action, etc."""
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Friendly name of the operation."""

    @overload
    def __init__(
        self,
        *,
        provider: Optional[str] = None,
        resource: Optional[str] = None,
        operation: Optional[str] = None,
        description: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class EffectiveOutboundIP(_Model):
    """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: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The fully qualified Azure resource id of an IP address resource."""

    @overload
    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class IngressProfile(_Model):
    """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: str or ~azure.mgmt.redhatopenshift.models.Visibility
    :ivar ip: The IP of the ingress.
    :vartype ip: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The ingress profile name."""
    visibility: Optional[Union[str, "_models.Visibility"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Ingress visibility. Known values are: \"Private\" and \"Public\"."""
    ip: Optional[str] = rest_field(visibility=["read"])
    """The IP of the ingress."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        visibility: Optional[Union[str, "_models.Visibility"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class LoadBalancerProfile(_Model):
    """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: ~azure.mgmt.redhatopenshift.models.ManagedOutboundIPs
    :ivar effective_outbound_ips: The list of effective outbound IP addresses of the public load
     balancer.
    :vartype effective_outbound_ips: list[~azure.mgmt.redhatopenshift.models.EffectiveOutboundIP]
    """

    managed_outbound_ips: Optional["_models.ManagedOutboundIPs"] = rest_field(
        name="managedOutboundIps", visibility=["read", "create", "update", "delete", "query"]
    )
    """The desired managed outbound IPs for the cluster public load balancer."""
    effective_outbound_ips: Optional[list["_models.EffectiveOutboundIP"]] = rest_field(
        name="effectiveOutboundIps", visibility=["read"]
    )
    """The list of effective outbound IP addresses of the public load balancer."""

    @overload
    def __init__(
        self,
        *,
        managed_outbound_ips: Optional["_models.ManagedOutboundIPs"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ManagedOutboundIPs(_Model):
    """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: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """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."""

    @overload
    def __init__(
        self,
        *,
        count: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ManagedServiceIdentity(_Model):
    """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: str or ~azure.mgmt.redhatopenshift.models.ManagedServiceIdentityType
    :ivar user_assigned_identities: The identities assigned to this resource by the user.
    :vartype user_assigned_identities: dict[str,
     ~azure.mgmt.redhatopenshift.models.UserAssignedIdentity]
    """

    principal_id: Optional[str] = rest_field(name="principalId", visibility=["read"])
    """The service principal ID of the system assigned identity. This property will only be provided
     for a system assigned identity."""
    tenant_id: Optional[str] = rest_field(name="tenantId", visibility=["read"])
    """The tenant ID of the system assigned identity. This property will only be provided for a system
     assigned identity."""
    type: Union[str, "_models.ManagedServiceIdentityType"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The type of managed identity assigned to this resource. Required. Known values are: \"None\",
     \"SystemAssigned\", \"UserAssigned\", and \"SystemAssigned,UserAssigned\"."""
    user_assigned_identities: Optional[dict[str, "_models.UserAssignedIdentity"]] = rest_field(
        name="userAssignedIdentities", visibility=["read", "create", "update", "delete", "query"]
    )
    """The identities assigned to this resource by the user."""

    @overload
    def __init__(
        self,
        *,
        type: Union[str, "_models.ManagedServiceIdentityType"],
        user_assigned_identities: Optional[dict[str, "_models.UserAssignedIdentity"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class MasterProfile(_Model):
    """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: str or ~azure.mgmt.redhatopenshift.models.EncryptionAtHost
    :ivar disk_encryption_set_id: The resource ID of an associated DiskEncryptionSet, if
     applicable.
    :vartype disk_encryption_set_id: str
    """

    vm_size: Optional[str] = rest_field(name="vmSize", visibility=["read", "create", "update", "delete", "query"])
    """The size of the master VMs."""
    subnet_id: Optional[str] = rest_field(name="subnetId", visibility=["read", "create", "update", "delete", "query"])
    """The Azure resource ID of the master subnet."""
    encryption_at_host: Optional[Union[str, "_models.EncryptionAtHost"]] = rest_field(
        name="encryptionAtHost", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether master virtual machines are encrypted at host. Known values are: \"Disabled\" and
     \"Enabled\"."""
    disk_encryption_set_id: Optional[str] = rest_field(
        name="diskEncryptionSetId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The resource ID of an associated DiskEncryptionSet, if applicable."""

    @overload
    def __init__(
        self,
        *,
        vm_size: Optional[str] = None,
        subnet_id: Optional[str] = None,
        encryption_at_host: Optional[Union[str, "_models.EncryptionAtHost"]] = None,
        disk_encryption_set_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class NetworkProfile(_Model):
    """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: str or ~azure.mgmt.redhatopenshift.models.OutboundType
    :ivar load_balancer_profile: The cluster load balancer profile.
    :vartype load_balancer_profile: ~azure.mgmt.redhatopenshift.models.LoadBalancerProfile
    :ivar preconfigured_nsg: Specifies whether subnets are pre-attached with an NSG. Known values
     are: "Disabled" and "Enabled".
    :vartype preconfigured_nsg: str or ~azure.mgmt.redhatopenshift.models.PreconfiguredNSG
    """

    pod_cidr: Optional[str] = rest_field(name="podCidr", visibility=["read", "create", "update", "delete", "query"])
    """The CIDR used for OpenShift/Kubernetes Pods."""
    service_cidr: Optional[str] = rest_field(
        name="serviceCidr", visibility=["read", "create", "update", "delete", "query"]
    )
    """The CIDR used for OpenShift/Kubernetes Services."""
    outbound_type: Optional[Union[str, "_models.OutboundType"]] = rest_field(
        name="outboundType", visibility=["read", "create", "update", "delete", "query"]
    )
    """The OutboundType used for egress traffic. Known values are: \"Loadbalancer\" and
     \"UserDefinedRouting\"."""
    load_balancer_profile: Optional["_models.LoadBalancerProfile"] = rest_field(
        name="loadBalancerProfile", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cluster load balancer profile."""
    preconfigured_nsg: Optional[Union[str, "_models.PreconfiguredNSG"]] = rest_field(
        name="preconfiguredNSG", visibility=["read", "create", "update", "delete", "query"]
    )
    """Specifies whether subnets are pre-attached with an NSG. Known values are: \"Disabled\" and
     \"Enabled\"."""

    @overload
    def __init__(
        self,
        *,
        pod_cidr: Optional[str] = None,
        service_cidr: Optional[str] = None,
        outbound_type: Optional[Union[str, "_models.OutboundType"]] = None,
        load_balancer_profile: Optional["_models.LoadBalancerProfile"] = None,
        preconfigured_nsg: Optional[Union[str, "_models.PreconfiguredNSG"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Resource(_Model):
    """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: ~azure.mgmt.redhatopenshift.models.SystemData
    """

    id: Optional[str] = rest_field(visibility=["read"])
    """Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}."""
    name: Optional[str] = rest_field(visibility=["read"])
    """The name of the resource."""
    type: Optional[str] = rest_field(visibility=["read"])
    """The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or
     \"Microsoft.Storage/storageAccounts\"."""
    system_data: Optional["_models.SystemData"] = rest_field(name="systemData", visibility=["read"])
    """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: ~azure.mgmt.redhatopenshift.models.SystemData
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    """

    tags: Optional[dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Resource tags."""
    location: str = rest_field(visibility=["read", "create"])
    """The geo-location where the resource lives. Required."""

    @overload
    def __init__(
        self,
        *,
        location: str,
        tags: Optional[dict[str, str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


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: ~azure.mgmt.redhatopenshift.models.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: ~azure.mgmt.redhatopenshift.models.OpenShiftClusterProperties
    :ivar identity: The managed service identities assigned to this resource.
    :vartype identity: ~azure.mgmt.redhatopenshift.models.ManagedServiceIdentity
    """

    properties: Optional["_models.OpenShiftClusterProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The cluster properties."""
    identity: Optional["_models.ManagedServiceIdentity"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The managed service identities assigned to this resource."""

    __flattened_items = [
        "provisioning_state",
        "cluster_profile",
        "console_profile",
        "service_principal_profile",
        "platform_workload_identity_profile",
        "network_profile",
        "master_profile",
        "worker_profiles",
        "worker_profiles_status",
        "apiserver_profile",
        "ingress_profiles",
    ]

    @overload
    def __init__(
        self,
        *,
        location: str,
        tags: Optional[dict[str, str]] = None,
        properties: Optional["_models.OpenShiftClusterProperties"] = None,
        identity: Optional["_models.ManagedServiceIdentity"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class OpenShiftClusterAdminKubeconfig(_Model):
    """OpenShiftClusterAdminKubeconfig represents an OpenShift cluster's admin kubeconfig.

    :ivar kubeconfig: The base64-encoded kubeconfig file.
    :vartype kubeconfig: str
    """

    kubeconfig: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The base64-encoded kubeconfig file."""

    @overload
    def __init__(
        self,
        *,
        kubeconfig: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OpenShiftClusterCredentials(_Model):
    """OpenShiftClusterCredentials represents an OpenShift cluster's credentials.

    :ivar kubeadmin_username: The username for the kubeadmin user.
    :vartype kubeadmin_username: str
    :ivar kubeadmin_password: The password for the kubeadmin user.
    :vartype kubeadmin_password: str
    """

    kubeadmin_username: Optional[str] = rest_field(
        name="kubeadminUsername", visibility=["read", "create", "update", "delete", "query"]
    )
    """The username for the kubeadmin user."""
    kubeadmin_password: Optional[str] = rest_field(
        name="kubeadminPassword", visibility=["read", "create", "update", "delete", "query"]
    )
    """The password for the kubeadmin user."""

    @overload
    def __init__(
        self,
        *,
        kubeadmin_username: Optional[str] = None,
        kubeadmin_password: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OpenShiftClusterProperties(_Model):
    """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: str or ~azure.mgmt.redhatopenshift.models.ProvisioningState
    :ivar cluster_profile: The cluster profile.
    :vartype cluster_profile: ~azure.mgmt.redhatopenshift.models.ClusterProfile
    :ivar console_profile: The console profile.
    :vartype console_profile: ~azure.mgmt.redhatopenshift.models.ConsoleProfile
    :ivar service_principal_profile: The cluster service principal profile.
    :vartype service_principal_profile: ~azure.mgmt.redhatopenshift.models.ServicePrincipalProfile
    :ivar platform_workload_identity_profile: The workload identity profile.
    :vartype platform_workload_identity_profile:
     ~azure.mgmt.redhatopenshift.models.PlatformWorkloadIdentityProfile
    :ivar network_profile: The cluster network profile.
    :vartype network_profile: ~azure.mgmt.redhatopenshift.models.NetworkProfile
    :ivar master_profile: The cluster master profile.
    :vartype master_profile: ~azure.mgmt.redhatopenshift.models.MasterProfile
    :ivar worker_profiles: The cluster worker profiles.
    :vartype worker_profiles: list[~azure.mgmt.redhatopenshift.models.WorkerProfile]
    :ivar worker_profiles_status: The cluster worker profiles status.
    :vartype worker_profiles_status: list[~azure.mgmt.redhatopenshift.models.WorkerProfile]
    :ivar apiserver_profile: The cluster API server profile.
    :vartype apiserver_profile: ~azure.mgmt.redhatopenshift.models.APIServerProfile
    :ivar ingress_profiles: The cluster ingress profiles.
    :vartype ingress_profiles: list[~azure.mgmt.redhatopenshift.models.IngressProfile]
    """

    provisioning_state: Optional[Union[str, "_models.ProvisioningState"]] = rest_field(
        name="provisioningState", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cluster provisioning state. Known values are: \"AdminUpdating\", \"Canceled\",
     \"Creating\", \"Deleting\", \"Failed\", \"Succeeded\", and \"Updating\"."""
    cluster_profile: Optional["_models.ClusterProfile"] = rest_field(
        name="clusterProfile", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cluster profile."""
    console_profile: Optional["_models.ConsoleProfile"] = rest_field(
        name="consoleProfile", visibility=["read", "create", "update", "delete", "query"]
    )
    """The console profile."""
    service_principal_profile: Optional["_models.ServicePrincipalProfile"] = rest_field(
        name="servicePrincipalProfile", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cluster service principal profile."""
    platform_workload_identity_profile: Optional["_models.PlatformWorkloadIdentityProfile"] = rest_field(
        name="platformWorkloadIdentityProfile", visibility=["read", "create", "update", "delete", "query"]
    )
    """The workload identity profile."""
    network_profile: Optional["_models.NetworkProfile"] = rest_field(
        name="networkProfile", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cluster network profile."""
    master_profile: Optional["_models.MasterProfile"] = rest_field(
        name="masterProfile", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cluster master profile."""
    worker_profiles: Optional[list["_models.WorkerProfile"]] = rest_field(
        name="workerProfiles", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cluster worker profiles."""
    worker_profiles_status: Optional[list["_models.WorkerProfile"]] = rest_field(
        name="workerProfilesStatus", visibility=["read"]
    )
    """The cluster worker profiles status."""
    apiserver_profile: Optional["_models.APIServerProfile"] = rest_field(
        name="apiserverProfile", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cluster API server profile."""
    ingress_profiles: Optional[list["_models.IngressProfile"]] = rest_field(
        name="ingressProfiles", visibility=["read", "create", "update", "delete", "query"]
    )
    """The cluster ingress profiles."""

    @overload
    def __init__(
        self,
        *,
        provisioning_state: Optional[Union[str, "_models.ProvisioningState"]] = None,
        cluster_profile: Optional["_models.ClusterProfile"] = None,
        console_profile: Optional["_models.ConsoleProfile"] = None,
        service_principal_profile: Optional["_models.ServicePrincipalProfile"] = None,
        platform_workload_identity_profile: Optional["_models.PlatformWorkloadIdentityProfile"] = None,
        network_profile: Optional["_models.NetworkProfile"] = None,
        master_profile: Optional["_models.MasterProfile"] = None,
        worker_profiles: Optional[list["_models.WorkerProfile"]] = None,
        apiserver_profile: Optional["_models.APIServerProfile"] = None,
        ingress_profiles: Optional[list["_models.IngressProfile"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OpenShiftClusterUpdate(_Model):
    """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: ~azure.mgmt.redhatopenshift.models.OpenShiftClusterProperties
    :ivar identity: Identity stores information about the cluster MSI(s) in a workload identity
     cluster.
    :vartype identity: ~azure.mgmt.redhatopenshift.models.ManagedServiceIdentity
    """

    tags: Optional[dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The resource tags."""
    properties: Optional["_models.OpenShiftClusterProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The cluster properties."""
    identity: Optional["_models.ManagedServiceIdentity"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Identity stores information about the cluster MSI(s) in a workload identity cluster."""

    __flattened_items = [
        "provisioning_state",
        "cluster_profile",
        "console_profile",
        "service_principal_profile",
        "platform_workload_identity_profile",
        "network_profile",
        "master_profile",
        "worker_profiles",
        "worker_profiles_status",
        "apiserver_profile",
        "ingress_profiles",
    ]

    @overload
    def __init__(
        self,
        *,
        tags: Optional[dict[str, str]] = None,
        properties: Optional["_models.OpenShiftClusterProperties"] = None,
        identity: Optional["_models.ManagedServiceIdentity"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class ProxyResource(Resource):
    """Proxy 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: ~azure.mgmt.redhatopenshift.models.SystemData
    """


class OpenShiftVersion(ProxyResource):
    """OpenShiftVersion represents an OpenShift version that can be installed.

    :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: ~azure.mgmt.redhatopenshift.models.SystemData
    :ivar properties: The properties for the OpenShiftVersion resource.
    :vartype properties: ~azure.mgmt.redhatopenshift.models.OpenShiftVersionProperties
    """

    properties: Optional["_models.OpenShiftVersionProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The properties for the OpenShiftVersion resource."""

    __flattened_items = ["version"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.OpenShiftVersionProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class OpenShiftVersionProperties(_Model):
    """OpenShiftVersionProperties represents the properties of an OpenShiftVersion.

    :ivar version: Version represents the version to create the cluster at.
    :vartype version: str
    """

    version: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Version represents the version to create the cluster at."""

    @overload
    def __init__(
        self,
        *,
        version: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Operation(_Model):
    """Operation represents an RP operation.

    :ivar name: Operation name: {provider}/{resource}/{operation}.
    :vartype name: str
    :ivar display: The object that describes the operation.
    :vartype display: ~azure.mgmt.redhatopenshift.models.Display
    :ivar origin: Sources of requests to this operation.  Comma separated list with valid values
     user or system, e.g. "user,system".
    :vartype origin: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Operation name: {provider}/{resource}/{operation}."""
    display: Optional["_models.Display"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The object that describes the operation."""
    origin: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Sources of requests to this operation.  Comma separated list with valid values user or system,
     e.g. \"user,system\"."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        display: Optional["_models.Display"] = None,
        origin: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PlatformWorkloadIdentity(_Model):
    """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
    """

    resource_id: Optional[str] = rest_field(
        name="resourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The resource ID of the PlatformWorkloadIdentity resource."""
    client_id: Optional[str] = rest_field(name="clientId", visibility=["read"])
    """The ClientID of the PlatformWorkloadIdentity resource."""
    object_id: Optional[str] = rest_field(name="objectId", visibility=["read"])
    """The ObjectID of the PlatformWorkloadIdentity resource."""

    @overload
    def __init__(
        self,
        *,
        resource_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PlatformWorkloadIdentityProfile(_Model):
    """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,
     ~azure.mgmt.redhatopenshift.models.PlatformWorkloadIdentity]
    """

    upgradeable_to: Optional[str] = rest_field(
        name="upgradeableTo", visibility=["read", "create", "update", "delete", "query"]
    )
    """UpgradeableTo stores a single OpenShift version a workload identity cluster can be upgraded to."""
    platform_workload_identities: Optional[dict[str, "_models.PlatformWorkloadIdentity"]] = rest_field(
        name="platformWorkloadIdentities", visibility=["read", "create", "update", "delete", "query"]
    )
    """Dictionary of <PlatformWorkloadIdentity>."""

    @overload
    def __init__(
        self,
        *,
        upgradeable_to: Optional[str] = None,
        platform_workload_identities: Optional[dict[str, "_models.PlatformWorkloadIdentity"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PlatformWorkloadIdentityRole(_Model):
    """PlatformWorkloadIdentityRole represents a mapping from a particular OCP operator to the
    built-in role that should be assigned to that operator's corresponding managed identity.

    :ivar operator_name: OperatorName represents the name of the operator that this role is for.
    :vartype operator_name: str
    :ivar role_definition_name: RoleDefinitionName represents the name of the role.
    :vartype role_definition_name: str
    :ivar role_definition_id: RoleDefinitionID represents the resource ID of the role definition.
    :vartype role_definition_id: str
    """

    operator_name: Optional[str] = rest_field(
        name="operatorName", visibility=["read", "create", "update", "delete", "query"]
    )
    """OperatorName represents the name of the operator that this role is for."""
    role_definition_name: Optional[str] = rest_field(
        name="roleDefinitionName", visibility=["read", "create", "update", "delete", "query"]
    )
    """RoleDefinitionName represents the name of the role."""
    role_definition_id: Optional[str] = rest_field(
        name="roleDefinitionId", visibility=["read", "create", "update", "delete", "query"]
    )
    """RoleDefinitionID represents the resource ID of the role definition."""

    @overload
    def __init__(
        self,
        *,
        operator_name: Optional[str] = None,
        role_definition_name: Optional[str] = None,
        role_definition_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PlatformWorkloadIdentityRoleSet(ProxyResource):
    """PlatformWorkloadIdentityRoleSet represents a mapping from the names of OCP operators to the
    built-in roles that should be assigned to those operator's corresponding managed identities for
    a particular OCP version.

    :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: ~azure.mgmt.redhatopenshift.models.SystemData
    :ivar properties: The properties for the PlatformWorkloadIdentityRoleSet resource.
    :vartype properties:
     ~azure.mgmt.redhatopenshift.models.PlatformWorkloadIdentityRoleSetProperties
    """

    properties: Optional["_models.PlatformWorkloadIdentityRoleSetProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The properties for the PlatformWorkloadIdentityRoleSet resource."""

    __flattened_items = ["open_shift_version", "platform_workload_identity_roles"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.PlatformWorkloadIdentityRoleSetProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class PlatformWorkloadIdentityRoleSetProperties(_Model):  # pylint: disable=name-too-long
    """PlatformWorkloadIdentityRoleSetProperties represents the properties of a
    PlatformWorkloadIdentityRoleSet resource.

    :ivar open_shift_version: OpenShiftVersion represents the version associated with this set of
     roles.
    :vartype open_shift_version: str
    :ivar platform_workload_identity_roles: PlatformWorkloadIdentityRoles represents the set of
     roles associated with this version.
    :vartype platform_workload_identity_roles:
     list[~azure.mgmt.redhatopenshift.models.PlatformWorkloadIdentityRole]
    """

    open_shift_version: Optional[str] = rest_field(
        name="openShiftVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """OpenShiftVersion represents the version associated with this set of roles."""
    platform_workload_identity_roles: Optional[list["_models.PlatformWorkloadIdentityRole"]] = rest_field(
        name="platformWorkloadIdentityRoles", visibility=["read", "create", "update", "delete", "query"]
    )
    """PlatformWorkloadIdentityRoles represents the set of roles associated with this version."""

    @overload
    def __init__(
        self,
        *,
        open_shift_version: Optional[str] = None,
        platform_workload_identity_roles: Optional[list["_models.PlatformWorkloadIdentityRole"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ServicePrincipalProfile(_Model):
    """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
    """

    client_id: Optional[str] = rest_field(name="clientId", visibility=["read", "create", "update", "delete", "query"])
    """The client ID used for the cluster."""
    client_secret: Optional[str] = rest_field(
        name="clientSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """The client secret used for the cluster."""

    @overload
    def __init__(
        self,
        *,
        client_id: Optional[str] = None,
        client_secret: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SystemData(_Model):
    """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: str or ~azure.mgmt.redhatopenshift.models.CreatedByType
    :ivar created_at: The timestamp of resource creation (UTC).
    :vartype created_at: ~datetime.datetime
    :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: str or ~azure.mgmt.redhatopenshift.models.CreatedByType
    :ivar last_modified_at: The timestamp of resource last modification (UTC).
    :vartype last_modified_at: ~datetime.datetime
    """

    created_by: Optional[str] = rest_field(name="createdBy", visibility=["read", "create", "update", "delete", "query"])
    """The identity that created the resource."""
    created_by_type: Optional[Union[str, "_models.CreatedByType"]] = rest_field(
        name="createdByType", visibility=["read", "create", "update", "delete", "query"]
    )
    """The type of identity that created the resource. Known values are: \"User\", \"Application\",
     \"ManagedIdentity\", and \"Key\"."""
    created_at: Optional[datetime.datetime] = rest_field(
        name="createdAt", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The timestamp of resource creation (UTC)."""
    last_modified_by: Optional[str] = rest_field(
        name="lastModifiedBy", visibility=["read", "create", "update", "delete", "query"]
    )
    """The identity that last modified the resource."""
    last_modified_by_type: Optional[Union[str, "_models.CreatedByType"]] = rest_field(
        name="lastModifiedByType", visibility=["read", "create", "update", "delete", "query"]
    )
    """The type of identity that last modified the resource. Known values are: \"User\",
     \"Application\", \"ManagedIdentity\", and \"Key\"."""
    last_modified_at: Optional[datetime.datetime] = rest_field(
        name="lastModifiedAt", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The timestamp of resource last modification (UTC)."""

    @overload
    def __init__(
        self,
        *,
        created_by: Optional[str] = None,
        created_by_type: Optional[Union[str, "_models.CreatedByType"]] = None,
        created_at: Optional[datetime.datetime] = None,
        last_modified_by: Optional[str] = None,
        last_modified_by_type: Optional[Union[str, "_models.CreatedByType"]] = None,
        last_modified_at: Optional[datetime.datetime] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class UserAssignedIdentity(_Model):
    """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
    """

    principal_id: Optional[str] = rest_field(name="principalId", visibility=["read"])
    """The principal ID of the assigned identity."""
    client_id: Optional[str] = rest_field(name="clientId", visibility=["read"])
    """The client ID of the assigned identity."""


class WorkerProfile(_Model):
    """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: str or ~azure.mgmt.redhatopenshift.models.EncryptionAtHost
    :ivar disk_encryption_set_id: The resource ID of an associated DiskEncryptionSet, if
     applicable.
    :vartype disk_encryption_set_id: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The worker profile name."""
    vm_size: Optional[str] = rest_field(name="vmSize", visibility=["read", "create", "update", "delete", "query"])
    """The size of the worker VMs."""
    disk_size_gb: Optional[int] = rest_field(
        name="diskSizeGB", visibility=["read", "create", "update", "delete", "query"]
    )
    """The disk size of the worker VMs."""
    subnet_id: Optional[str] = rest_field(name="subnetId", visibility=["read", "create", "update", "delete", "query"])
    """The Azure resource ID of the worker subnet."""
    count: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The number of worker VMs."""
    encryption_at_host: Optional[Union[str, "_models.EncryptionAtHost"]] = rest_field(
        name="encryptionAtHost", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether master virtual machines are encrypted at host. Known values are: \"Disabled\" and
     \"Enabled\"."""
    disk_encryption_set_id: Optional[str] = rest_field(
        name="diskEncryptionSetId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The resource ID of an associated DiskEncryptionSet, if applicable."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        vm_size: Optional[str] = None,
        disk_size_gb: Optional[int] = None,
        subnet_id: Optional[str] = None,
        count: Optional[int] = None,
        encryption_at_host: Optional[Union[str, "_models.EncryptionAtHost"]] = None,
        disk_encryption_set_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
