# Copyright (c) 2012-2025, Mark Peek <mark@peek.org>
# All rights reserved.
#
# See LICENSE file for full license.
#
# *** Do not modify - this file is autogenerated ***


from . import AWSObject, AWSProperty, PropsDictType, Tags
from .validators import boolean, integer


class EMREKSConfiguration(AWSProperty):
    """
    `EMREKSConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-endpoint-emreksconfiguration.html>`__
    """

    props: PropsDictType = {
        "Classification": (str, True),
        "Configurations": ([object], False),
        "Properties": (dict, False),
    }


class CloudWatchMonitoringConfiguration(AWSProperty):
    """
    `CloudWatchMonitoringConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-endpoint-cloudwatchmonitoringconfiguration.html>`__
    """

    props: PropsDictType = {
        "LogGroupName": (str, True),
        "LogStreamNamePrefix": (str, False),
    }


class ContainerLogRotationConfiguration(AWSProperty):
    """
    `ContainerLogRotationConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-endpoint-containerlogrotationconfiguration.html>`__
    """

    props: PropsDictType = {
        "MaxFilesToKeep": (integer, True),
        "RotationSize": (str, True),
    }


class S3MonitoringConfiguration(AWSProperty):
    """
    `S3MonitoringConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-endpoint-s3monitoringconfiguration.html>`__
    """

    props: PropsDictType = {
        "LogUri": (str, True),
    }


class MonitoringConfiguration(AWSProperty):
    """
    `MonitoringConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-endpoint-monitoringconfiguration.html>`__
    """

    props: PropsDictType = {
        "CloudWatchMonitoringConfiguration": (CloudWatchMonitoringConfiguration, False),
        "ContainerLogRotationConfiguration": (ContainerLogRotationConfiguration, False),
        "PersistentAppUI": (str, False),
        "S3MonitoringConfiguration": (S3MonitoringConfiguration, False),
    }


class ConfigurationOverrides(AWSProperty):
    """
    `ConfigurationOverrides <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-endpoint-configurationoverrides.html>`__
    """

    props: PropsDictType = {
        "ApplicationConfiguration": ([EMREKSConfiguration], False),
        "MonitoringConfiguration": (MonitoringConfiguration, False),
    }


class Endpoint(AWSObject):
    """
    `Endpoint <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emrcontainers-endpoint.html>`__
    """

    resource_type = "AWS::EMRContainers::Endpoint"

    props: PropsDictType = {
        "ConfigurationOverrides": (ConfigurationOverrides, False),
        "ExecutionRoleArn": (str, True),
        "Name": (str, False),
        "ReleaseLabel": (str, True),
        "Tags": (Tags, False),
        "Type": (str, True),
        "VirtualClusterId": (str, True),
    }


class EksInfo(AWSProperty):
    """
    `EksInfo <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-virtualcluster-eksinfo.html>`__
    """

    props: PropsDictType = {
        "Namespace": (str, True),
    }


class ContainerInfo(AWSProperty):
    """
    `ContainerInfo <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-virtualcluster-containerinfo.html>`__
    """

    props: PropsDictType = {
        "EksInfo": (EksInfo, True),
    }


class ContainerProvider(AWSProperty):
    """
    `ContainerProvider <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-virtualcluster-containerprovider.html>`__
    """

    props: PropsDictType = {
        "Id": (str, True),
        "Info": (ContainerInfo, True),
        "Type": (str, True),
    }


class IAMConfiguration(AWSProperty):
    """
    `IAMConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-securityconfiguration-iamconfiguration.html>`__
    """

    props: PropsDictType = {
        "SystemRole": (str, False),
    }


class IdentityCenterConfiguration(AWSProperty):
    """
    `IdentityCenterConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-securityconfiguration-identitycenterconfiguration.html>`__
    """

    props: PropsDictType = {
        "EnableIdentityCenter": (boolean, False),
        "IdentityCenterApplicationAssignmentRequired": (boolean, False),
        "IdentityCenterInstanceARN": (str, False),
    }


class AuthenticationConfiguration(AWSProperty):
    """
    `AuthenticationConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-securityconfiguration-authenticationconfiguration.html>`__
    """

    props: PropsDictType = {
        "IAMConfiguration": (IAMConfiguration, False),
        "IdentityCenterConfiguration": (IdentityCenterConfiguration, False),
    }


class SecureNamespaceInfo(AWSProperty):
    """
    `SecureNamespaceInfo <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-securityconfiguration-securenamespaceinfo.html>`__
    """

    props: PropsDictType = {
        "ClusterId": (str, False),
        "Namespace": (str, False),
    }


class LakeFormationConfiguration(AWSProperty):
    """
    `LakeFormationConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-securityconfiguration-lakeformationconfiguration.html>`__
    """

    props: PropsDictType = {
        "AuthorizedSessionTagValue": (str, False),
        "QueryAccessControlEnabled": (boolean, False),
        "QueryEngineRoleArn": (str, False),
        "SecureNamespaceInfo": (SecureNamespaceInfo, False),
    }


class AuthorizationConfiguration(AWSProperty):
    """
    `AuthorizationConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-securityconfiguration-authorizationconfiguration.html>`__
    """

    props: PropsDictType = {
        "LakeFormationConfiguration": (LakeFormationConfiguration, False),
    }


class LocalDiskEncryptionConfiguration(AWSProperty):
    """
    `LocalDiskEncryptionConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-securityconfiguration-localdiskencryptionconfiguration.html>`__
    """

    props: PropsDictType = {
        "AwsKmsKeyId": (str, False),
        "EncryptionKeyProviderType": (str, False),
    }


class S3EncryptionConfiguration(AWSProperty):
    """
    `S3EncryptionConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-securityconfiguration-s3encryptionconfiguration.html>`__
    """

    props: PropsDictType = {
        "EncryptionOption": (str, False),
        "KMSKeyId": (str, False),
    }


class AtRestEncryptionConfiguration(AWSProperty):
    """
    `AtRestEncryptionConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-securityconfiguration-atrestencryptionconfiguration.html>`__
    """

    props: PropsDictType = {
        "LocalDiskEncryptionConfiguration": (LocalDiskEncryptionConfiguration, False),
        "S3EncryptionConfiguration": (S3EncryptionConfiguration, False),
    }


class TLSCertificateConfiguration(AWSProperty):
    """
    `TLSCertificateConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-securityconfiguration-tlscertificateconfiguration.html>`__
    """

    props: PropsDictType = {
        "CertificateProviderType": (str, False),
        "PrivateKeySecretArn": (str, False),
        "PublicKeySecretArn": (str, False),
    }


class InTransitEncryptionConfiguration(AWSProperty):
    """
    `InTransitEncryptionConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-securityconfiguration-intransitencryptionconfiguration.html>`__
    """

    props: PropsDictType = {
        "TLSCertificateConfiguration": (TLSCertificateConfiguration, False),
    }


class EncryptionConfiguration(AWSProperty):
    """
    `EncryptionConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-securityconfiguration-encryptionconfiguration.html>`__
    """

    props: PropsDictType = {
        "AtRestEncryptionConfiguration": (AtRestEncryptionConfiguration, False),
        "InTransitEncryptionConfiguration": (InTransitEncryptionConfiguration, False),
    }


class SecurityConfigurationData(AWSProperty):
    """
    `SecurityConfigurationData <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-securityconfiguration-securityconfigurationdata.html>`__
    """

    props: PropsDictType = {
        "AuthenticationConfiguration": (AuthenticationConfiguration, False),
        "AuthorizationConfiguration": (AuthorizationConfiguration, False),
        "EncryptionConfiguration": (EncryptionConfiguration, False),
    }


class SecurityConfiguration(AWSObject):
    """
    `SecurityConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emrcontainers-securityconfiguration.html>`__
    """

    resource_type = "AWS::EMRContainers::SecurityConfiguration"

    props: PropsDictType = {
        "ContainerProvider": (ContainerProvider, False),
        "Name": (str, False),
        "SecurityConfigurationData": (SecurityConfigurationData, True),
        "Tags": (Tags, False),
    }


class VirtualCluster(AWSObject):
    """
    `VirtualCluster <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emrcontainers-virtualcluster.html>`__
    """

    resource_type = "AWS::EMRContainers::VirtualCluster"

    props: PropsDictType = {
        "ContainerProvider": (ContainerProvider, True),
        "Name": (str, True),
        "SecurityConfigurationId": (str, False),
        "Tags": (Tags, False),
    }


class Certificate(AWSProperty):
    """
    `Certificate <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-endpoint-certificate.html>`__
    """

    props: PropsDictType = {
        "CertificateArn": (str, False),
        "CertificateData": (str, False),
    }
