# 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, double, integer


class MaintenanceWindow(AWSProperty):
    """
    `MaintenanceWindow <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-odb-cloudautonomousvmcluster-maintenancewindow.html>`__
    """

    props: PropsDictType = {
        "DaysOfWeek": ([str], False),
        "HoursOfDay": ([integer], False),
        "LeadTimeInWeeks": (integer, False),
        "Months": ([str], False),
        "Preference": (str, False),
        "WeeksOfMonth": ([integer], False),
    }


class CloudAutonomousVmCluster(AWSObject):
    """
    `CloudAutonomousVmCluster <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-odb-cloudautonomousvmcluster.html>`__
    """

    resource_type = "AWS::ODB::CloudAutonomousVmCluster"

    props: PropsDictType = {
        "AutonomousDataStorageSizeInTBs": (double, False),
        "CloudExadataInfrastructureId": (str, False),
        "CpuCoreCountPerNode": (integer, False),
        "DbServers": ([str], False),
        "Description": (str, False),
        "DisplayName": (str, False),
        "IsMtlsEnabledVmCluster": (boolean, False),
        "LicenseModel": (str, False),
        "MaintenanceWindow": (MaintenanceWindow, False),
        "MemoryPerOracleComputeUnitInGBs": (integer, False),
        "OdbNetworkId": (str, False),
        "ScanListenerPortNonTls": (integer, False),
        "ScanListenerPortTls": (integer, False),
        "Tags": (Tags, False),
        "TimeZone": (str, False),
        "TotalContainerDatabases": (integer, False),
    }


class CustomerContact(AWSProperty):
    """
    `CustomerContact <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-odb-cloudexadatainfrastructure-customercontact.html>`__
    """

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


class CloudExadataInfrastructure(AWSObject):
    """
    `CloudExadataInfrastructure <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-odb-cloudexadatainfrastructure.html>`__
    """

    resource_type = "AWS::ODB::CloudExadataInfrastructure"

    props: PropsDictType = {
        "AvailabilityZone": (str, False),
        "AvailabilityZoneId": (str, False),
        "ComputeCount": (integer, False),
        "CustomerContactsToSendToOCI": ([CustomerContact], False),
        "DatabaseServerType": (str, False),
        "DisplayName": (str, False),
        "Shape": (str, False),
        "StorageCount": (integer, False),
        "StorageServerType": (str, False),
        "Tags": (Tags, False),
    }


class DataCollectionOptions(AWSProperty):
    """
    `DataCollectionOptions <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-odb-cloudvmcluster-datacollectionoptions.html>`__
    """

    props: PropsDictType = {
        "IsDiagnosticsEventsEnabled": (boolean, False),
        "IsHealthMonitoringEnabled": (boolean, False),
        "IsIncidentLogsEnabled": (boolean, False),
    }


class CloudVmCluster(AWSObject):
    """
    `CloudVmCluster <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-odb-cloudvmcluster.html>`__
    """

    resource_type = "AWS::ODB::CloudVmCluster"

    props: PropsDictType = {
        "CloudExadataInfrastructureId": (str, False),
        "ClusterName": (str, False),
        "CpuCoreCount": (integer, False),
        "DataCollectionOptions": (DataCollectionOptions, False),
        "DataStorageSizeInTBs": (double, False),
        "DbNodeStorageSizeInGBs": (integer, False),
        "DbServers": ([str], False),
        "DisplayName": (str, False),
        "GiVersion": (str, False),
        "Hostname": (str, False),
        "IsLocalBackupEnabled": (boolean, False),
        "IsSparseDiskgroupEnabled": (boolean, False),
        "LicenseModel": (str, False),
        "MemorySizeInGBs": (integer, False),
        "OdbNetworkId": (str, False),
        "ScanListenerPortTcp": (integer, False),
        "SshPublicKeys": ([str], False),
        "SystemVersion": (str, False),
        "Tags": (Tags, False),
        "TimeZone": (str, False),
    }


class OdbNetwork(AWSObject):
    """
    `OdbNetwork <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-odb-odbnetwork.html>`__
    """

    resource_type = "AWS::ODB::OdbNetwork"

    props: PropsDictType = {
        "AvailabilityZone": (str, False),
        "AvailabilityZoneId": (str, False),
        "BackupSubnetCidr": (str, False),
        "ClientSubnetCidr": (str, False),
        "DefaultDnsPrefix": (str, False),
        "DeleteAssociatedResources": (boolean, False),
        "DisplayName": (str, False),
        "Tags": (Tags, False),
    }
