// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may
// not use this file except in compliance with the License. A copy of the
// License is located at
//
//     http://aws.amazon.com/apache2.0/
//
// or in the "license" file accompanying this file. This file is distributed
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
// express or implied. See the License for the specific language governing
// permissions and limitations under the License.

// Code generated by ack-generate. DO NOT EDIT.

package v1alpha1

import (
	ackv1alpha1 "github.com/aws-controllers-k8s/runtime/apis/core/v1alpha1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// DBClusterSpec defines the desired state of DBCluster.
//
// Contains the details of an Amazon Aurora DB cluster or Multi-AZ DB cluster.
//
// For an Amazon Aurora DB cluster, this data type is used as a response element
// in the operations CreateDBCluster, DeleteDBCluster, DescribeDBClusters, FailoverDBCluster,
// ModifyDBCluster, PromoteReadReplicaDBCluster, RestoreDBClusterFromS3, RestoreDBClusterFromSnapshot,
// RestoreDBClusterToPointInTime, StartDBCluster, and StopDBCluster.
//
// For a Multi-AZ DB cluster, this data type is used as a response element in
// the operations CreateDBCluster, DeleteDBCluster, DescribeDBClusters, FailoverDBCluster,
// ModifyDBCluster, RebootDBCluster, RestoreDBClusterFromSnapshot, and RestoreDBClusterToPointInTime.
//
// For more information on Amazon Aurora DB clusters, see What is Amazon Aurora?
// (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)
// in the Amazon Aurora User Guide.
//
// For more information on Multi-AZ DB clusters, see Multi-AZ deployments with
// two readable standby DB instances (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html)
// in the Amazon RDS User Guide.
type DBClusterSpec struct {

	// The amount of storage in gibibytes (GiB) to allocate to each DB instance
	// in the Multi-AZ DB cluster.
	//
	// Valid for Cluster Type: Multi-AZ DB clusters only
	//
	// This setting is required to create a Multi-AZ DB cluster.
	AllocatedStorage *int64 `json:"allocatedStorage,omitempty"`
	// Specifies whether minor engine upgrades are applied automatically to the
	// DB cluster during the maintenance window. By default, minor engine upgrades
	// are applied automatically.
	//
	// Valid for Cluster Type: Multi-AZ DB clusters only
	AutoMinorVersionUpgrade *bool `json:"autoMinorVersionUpgrade,omitempty"`
	// A list of Availability Zones (AZs) where you specifically want to create
	// DB instances in the DB cluster.
	//
	// For information on AZs, see Availability Zones (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.RegionsAndAvailabilityZones.html#Concepts.RegionsAndAvailabilityZones.AvailabilityZones)
	// in the Amazon Aurora User Guide.
	//
	// Valid for Cluster Type: Aurora DB clusters only
	//
	// Constraints:
	//
	//   - Can't specify more than three AZs.
	AvailabilityZones []*string `json:"availabilityZones,omitempty"`
	// The target backtrack window, in seconds. To disable backtracking, set this
	// value to 0.
	//
	// Valid for Cluster Type: Aurora MySQL DB clusters only
	//
	// Default: 0
	//
	// Constraints:
	//
	//   - If specified, this value must be set to a number from 0 to 259,200 (72
	//     hours).
	BacktrackWindow *int64 `json:"backtrackWindow,omitempty"`
	// The number of days for which automated backups are retained.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	//
	// Default: 1
	//
	// Constraints:
	//
	//   - Must be a value from 1 to 35.
	BackupRetentionPeriod *int64 `json:"backupRetentionPeriod,omitempty"`
	// The name of the character set (CharacterSet) to associate the DB cluster
	// with.
	//
	// Valid for Cluster Type: Aurora DB clusters only
	CharacterSetName *string `json:"characterSetName,omitempty"`
	// Specifies whether to copy all tags from the DB cluster to snapshots of the
	// DB cluster. The default is not to copy them.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	CopyTagsToSnapshot *bool `json:"copyTagsToSnapshot,omitempty"`
	// The identifier for this DB cluster. This parameter is stored as a lowercase
	// string.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	//
	// Constraints:
	//
	//   - Must contain from 1 to 63 (for Aurora DB clusters) or 1 to 52 (for Multi-AZ
	//     DB clusters) letters, numbers, or hyphens.
	//
	//   - First character must be a letter.
	//
	//   - Can't end with a hyphen or contain two consecutive hyphens.
	//
	// Example: my-cluster1
	// +kubebuilder:validation:Required
	DBClusterIdentifier *string `json:"dbClusterIdentifier"`
	// The compute and memory capacity of each DB instance in the Multi-AZ DB cluster,
	// for example db.m6gd.xlarge. Not all DB instance classes are available in
	// all Amazon Web Services Regions, or for all database engines.
	//
	// For the full list of DB instance classes and availability for your engine,
	// see DB instance class (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html)
	// in the Amazon RDS User Guide.
	//
	// This setting is required to create a Multi-AZ DB cluster.
	//
	// Valid for Cluster Type: Multi-AZ DB clusters only
	DBClusterInstanceClass *string `json:"dbClusterInstanceClass,omitempty"`
	// The name of the DB cluster parameter group to associate with this DB cluster.
	// If you don't specify a value, then the default DB cluster parameter group
	// for the specified DB engine and version is used.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	//
	// Constraints:
	//
	//   - If supplied, must match the name of an existing DB cluster parameter
	//     group.
	DBClusterParameterGroupName *string                                  `json:"dbClusterParameterGroupName,omitempty"`
	DBClusterParameterGroupRef  *ackv1alpha1.AWSResourceReferenceWrapper `json:"dbClusterParameterGroupRef,omitempty"`
	// A DB subnet group to associate with this DB cluster.
	//
	// This setting is required to create a Multi-AZ DB cluster.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	//
	// Constraints:
	//
	//   - Must match the name of an existing DB subnet group.
	//
	// Example: mydbsubnetgroup
	DBSubnetGroupName *string                                  `json:"dbSubnetGroupName,omitempty"`
	DBSubnetGroupRef  *ackv1alpha1.AWSResourceReferenceWrapper `json:"dbSubnetGroupRef,omitempty"`
	// Reserved for future use.
	DBSystemID *string `json:"dbSystemID,omitempty"`
	// Specifies the mode of Database Insights to enable for the cluster.
	DatabaseInsightsMode *string `json:"databaseInsightsMode,omitempty"`
	// The name for your database of up to 64 alphanumeric characters. A database
	// named postgres is always created. If this parameter is specified, an additional
	// database with this name is created.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	DatabaseName *string `json:"databaseName,omitempty"`
	// Specifies whether the DB cluster has deletion protection enabled. The database
	// can't be deleted when deletion protection is enabled. By default, deletion
	// protection isn't enabled.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	DeletionProtection *bool `json:"deletionProtection,omitempty"`
	// DestinationRegion is used for presigning the request to a given region.
	DestinationRegion *string `json:"destinationRegion,omitempty"`
	// The Active Directory directory ID to create the DB cluster in.
	//
	// For Amazon Aurora DB clusters, Amazon RDS can use Kerberos authentication
	// to authenticate users that connect to the DB cluster.
	//
	// For more information, see Kerberos authentication (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/kerberos-authentication.html)
	// in the Amazon Aurora User Guide.
	//
	// Valid for Cluster Type: Aurora DB clusters only
	Domain *string `json:"domain,omitempty"`
	// The name of the IAM role to use when making API calls to the Directory Service.
	//
	// Valid for Cluster Type: Aurora DB clusters only
	DomainIAMRoleName *string `json:"domainIAMRoleName,omitempty"`
	// The list of log types that need to be enabled for exporting to CloudWatch
	// Logs.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	//
	// The following values are valid for each DB engine:
	//
	//   - Aurora MySQL - audit | error | general | slowquery
	//
	//   - Aurora PostgreSQL - postgresql
	//
	//   - RDS for MySQL - error | general | slowquery
	//
	//   - RDS for PostgreSQL - postgresql | upgrade
	//
	// For more information about exporting CloudWatch Logs for Amazon RDS, see
	// Publishing Database Logs to Amazon CloudWatch Logs (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch)
	// in the Amazon RDS User Guide.
	//
	// For more information about exporting CloudWatch Logs for Amazon Aurora, see
	// Publishing Database Logs to Amazon CloudWatch Logs (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch)
	// in the Amazon Aurora User Guide.
	EnableCloudwatchLogsExports []*string `json:"enableCloudwatchLogsExports,omitempty"`
	// Specifies whether to enable this DB cluster to forward write operations to
	// the primary cluster of a global cluster (Aurora global database). By default,
	// write operations are not allowed on Aurora DB clusters that are secondary
	// clusters in an Aurora global database.
	//
	// You can set this value only on Aurora DB clusters that are members of an
	// Aurora global database. With this parameter enabled, a secondary cluster
	// can forward writes to the current primary cluster, and the resulting changes
	// are replicated back to this cluster. For the primary DB cluster of an Aurora
	// global database, this value is used immediately if the primary is demoted
	// by a global cluster API operation, but it does nothing until then.
	//
	// Valid for Cluster Type: Aurora DB clusters only
	EnableGlobalWriteForwarding *bool `json:"enableGlobalWriteForwarding,omitempty"`
	// Specifies whether to enable the HTTP endpoint for the DB cluster. By default,
	// the HTTP endpoint isn't enabled.
	//
	// When enabled, the HTTP endpoint provides a connectionless web service API
	// (RDS Data API) for running SQL queries on the DB cluster. You can also query
	// your database from inside the RDS console with the RDS query editor.
	//
	// RDS Data API is supported with the following DB clusters:
	//
	//   - Aurora PostgreSQL Serverless v2 and provisioned
	//
	//   - Aurora PostgreSQL and Aurora MySQL Serverless v1
	//
	// For more information, see Using RDS Data API (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api.html)
	// in the Amazon Aurora User Guide.
	//
	// Valid for Cluster Type: Aurora DB clusters only
	EnableHTTPEndpoint *bool `json:"enableHTTPEndpoint,omitempty"`
	// Specifies whether to enable mapping of Amazon Web Services Identity and Access
	// Management (IAM) accounts to database accounts. By default, mapping isn't
	// enabled.
	//
	// For more information, see IAM Database Authentication (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.IAMDBAuth.html)
	// in the Amazon Aurora User Guide or IAM database authentication for MariaDB,
	// MySQL, and PostgreSQL (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html)
	// in the Amazon RDS User Guide.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	EnableIAMDatabaseAuthentication *bool `json:"enableIAMDatabaseAuthentication,omitempty"`
	// Specifies whether to turn on Performance Insights for the DB cluster.
	//
	// For more information, see Using Amazon Performance Insights (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html)
	// in the Amazon RDS User Guide.
	//
	// Valid for Cluster Type: Multi-AZ DB clusters only
	EnablePerformanceInsights *bool `json:"enablePerformanceInsights,omitempty"`
	// The database engine to use for this DB cluster.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	//
	// Valid Values:
	//
	//   - aurora-mysql
	//
	//   - aurora-postgresql
	//
	//   - mysql
	//
	//   - postgres
	//
	//   - neptune - For information about using Amazon Neptune, see the Amazon
	//     Neptune User Guide (https://docs.aws.amazon.com/neptune/latest/userguide/intro.html).
	//
	// +kubebuilder:validation:Required
	Engine *string `json:"engine"`
	// The DB engine mode of the DB cluster, either provisioned or serverless.
	//
	// The serverless engine mode only applies for Aurora Serverless v1 DB clusters.
	// Aurora Serverless v2 DB clusters use the provisioned engine mode.
	//
	// For information about limitations and requirements for Serverless DB clusters,
	// see the following sections in the Amazon Aurora User Guide:
	//
	//   - Limitations of Aurora Serverless v1 (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html#aurora-serverless.limitations)
	//
	//   - Requirements for Aurora Serverless v2 (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html)
	//
	// Valid for Cluster Type: Aurora DB clusters only
	EngineMode *string `json:"engineMode,omitempty"`
	// The version number of the database engine to use.
	//
	// To list all of the available engine versions for Aurora MySQL version 2 (5.7-compatible)
	// and version 3 (MySQL 8.0-compatible), use the following command:
	//
	// aws rds describe-db-engine-versions --engine aurora-mysql --query "DBEngineVersions[].EngineVersion"
	//
	// You can supply either 5.7 or 8.0 to use the default engine version for Aurora
	// MySQL version 2 or version 3, respectively.
	//
	// To list all of the available engine versions for Aurora PostgreSQL, use the
	// following command:
	//
	// aws rds describe-db-engine-versions --engine aurora-postgresql --query "DBEngineVersions[].EngineVersion"
	//
	// To list all of the available engine versions for RDS for MySQL, use the following
	// command:
	//
	// aws rds describe-db-engine-versions --engine mysql --query "DBEngineVersions[].EngineVersion"
	//
	// To list all of the available engine versions for RDS for PostgreSQL, use
	// the following command:
	//
	// aws rds describe-db-engine-versions --engine postgres --query "DBEngineVersions[].EngineVersion"
	//
	// For information about a specific engine, see the following topics:
	//
	//   - Aurora MySQL - see Database engine updates for Amazon Aurora MySQL (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Updates.html)
	//     in the Amazon Aurora User Guide.
	//
	//   - Aurora PostgreSQL - see Amazon Aurora PostgreSQL releases and engine
	//     versions (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Updates.20180305.html)
	//     in the Amazon Aurora User Guide.
	//
	//   - RDS for MySQL - see Amazon RDS for MySQL (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html#MySQL.Concepts.VersionMgmt)
	//     in the Amazon RDS User Guide.
	//
	//   - RDS for PostgreSQL - see Amazon RDS for PostgreSQL (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts)
	//     in the Amazon RDS User Guide.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	EngineVersion *string `json:"engineVersion,omitempty"`
	// The global cluster ID of an Aurora cluster that becomes the primary cluster
	// in the new global database cluster.
	//
	// Valid for Cluster Type: Aurora DB clusters only
	GlobalClusterIdentifier *string `json:"globalClusterIdentifier,omitempty"`
	// The amount of Provisioned IOPS (input/output operations per second) to be
	// initially allocated for each DB instance in the Multi-AZ DB cluster.
	//
	// For information about valid IOPS values, see Provisioned IOPS storage (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#USER_PIOPS)
	// in the Amazon RDS User Guide.
	//
	// This setting is required to create a Multi-AZ DB cluster.
	//
	// Valid for Cluster Type: Multi-AZ DB clusters only
	//
	// Constraints:
	//
	//   - Must be a multiple between .5 and 50 of the storage amount for the DB
	//     cluster.
	IOPS *int64 `json:"iops,omitempty"`
	// The Amazon Web Services KMS key identifier for an encrypted DB cluster.
	//
	// The Amazon Web Services KMS key identifier is the key ARN, key ID, alias
	// ARN, or alias name for the KMS key. To use a KMS key in a different Amazon
	// Web Services account, specify the key ARN or alias ARN.
	//
	// When a KMS key isn't specified in KmsKeyId:
	//
	//   - If ReplicationSourceIdentifier identifies an encrypted source, then
	//     Amazon RDS uses the KMS key used to encrypt the source. Otherwise, Amazon
	//     RDS uses your default KMS key.
	//
	//   - If the StorageEncrypted parameter is enabled and ReplicationSourceIdentifier
	//     isn't specified, then Amazon RDS uses your default KMS key.
	//
	// There is a default KMS key for your Amazon Web Services account. Your Amazon
	// Web Services account has a different default KMS key for each Amazon Web
	// Services Region.
	//
	// If you create a read replica of an encrypted DB cluster in another Amazon
	// Web Services Region, make sure to set KmsKeyId to a KMS key identifier that
	// is valid in the destination Amazon Web Services Region. This KMS key is used
	// to encrypt the read replica in that Amazon Web Services Region.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	KMSKeyID  *string                                  `json:"kmsKeyID,omitempty"`
	KMSKeyRef *ackv1alpha1.AWSResourceReferenceWrapper `json:"kmsKeyRef,omitempty"`
	// Specifies whether to manage the master user password with Amazon Web Services
	// Secrets Manager.
	//
	// For more information, see Password management with Amazon Web Services Secrets
	// Manager (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html)
	// in the Amazon RDS User Guide and Password management with Amazon Web Services
	// Secrets Manager (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html)
	// in the Amazon Aurora User Guide.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	//
	// Constraints:
	//
	//   - Can't manage the master user password with Amazon Web Services Secrets
	//     Manager if MasterUserPassword is specified.
	ManageMasterUserPassword *bool `json:"manageMasterUserPassword,omitempty"`
	// The password for the master database user.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	//
	// Constraints:
	//
	//   - Must contain from 8 to 41 characters.
	//
	//   - Can contain any printable ASCII character except "/", """, or "@".
	//
	//   - Can't be specified if ManageMasterUserPassword is turned on.
	MasterUserPassword *ackv1alpha1.SecretKeyReference `json:"masterUserPassword,omitempty"`
	// The Amazon Web Services KMS key identifier to encrypt a secret that is automatically
	// generated and managed in Amazon Web Services Secrets Manager.
	//
	// This setting is valid only if the master user password is managed by RDS
	// in Amazon Web Services Secrets Manager for the DB cluster.
	//
	// The Amazon Web Services KMS key identifier is the key ARN, key ID, alias
	// ARN, or alias name for the KMS key. To use a KMS key in a different Amazon
	// Web Services account, specify the key ARN or alias ARN.
	//
	// If you don't specify MasterUserSecretKmsKeyId, then the aws/secretsmanager
	// KMS key is used to encrypt the secret. If the secret is in a different Amazon
	// Web Services account, then you can't use the aws/secretsmanager KMS key to
	// encrypt the secret, and you must use a customer managed KMS key.
	//
	// There is a default KMS key for your Amazon Web Services account. Your Amazon
	// Web Services account has a different default KMS key for each Amazon Web
	// Services Region.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	MasterUserSecretKMSKeyID  *string                                  `json:"masterUserSecretKMSKeyID,omitempty"`
	MasterUserSecretKMSKeyRef *ackv1alpha1.AWSResourceReferenceWrapper `json:"masterUserSecretKMSKeyRef,omitempty"`
	// The name of the master user for the DB cluster.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	//
	// Constraints:
	//
	//   - Must be 1 to 16 letters or numbers.
	//
	//   - First character must be a letter.
	//
	//   - Can't be a reserved word for the chosen database engine.
	MasterUsername *string `json:"masterUsername,omitempty"`
	// The interval, in seconds, between points when Enhanced Monitoring metrics
	// are collected for the DB cluster. To turn off collecting Enhanced Monitoring
	// metrics, specify 0.
	//
	// If MonitoringRoleArn is specified, also set MonitoringInterval to a value
	// other than 0.
	//
	// Valid for Cluster Type: Multi-AZ DB clusters only
	//
	// Valid Values: 0 | 1 | 5 | 10 | 15 | 30 | 60
	//
	// Default: 0
	MonitoringInterval *int64 `json:"monitoringInterval,omitempty"`
	// The Amazon Resource Name (ARN) for the IAM role that permits RDS to send
	// Enhanced Monitoring metrics to Amazon CloudWatch Logs. An example is arn:aws:iam:123456789012:role/emaccess.
	// For information on creating a monitoring role, see Setting up and enabling
	// Enhanced Monitoring (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html#USER_Monitoring.OS.Enabling)
	// in the Amazon RDS User Guide.
	//
	// If MonitoringInterval is set to a value other than 0, supply a MonitoringRoleArn
	// value.
	//
	// Valid for Cluster Type: Multi-AZ DB clusters only
	MonitoringRoleARN *string `json:"monitoringRoleARN,omitempty"`
	// The network type of the DB cluster.
	//
	// The network type is determined by the DBSubnetGroup specified for the DB
	// cluster. A DBSubnetGroup can support only the IPv4 protocol or the IPv4 and
	// the IPv6 protocols (DUAL).
	//
	// For more information, see Working with a DB instance in a VPC (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html)
	// in the Amazon Aurora User Guide.
	//
	// Valid for Cluster Type: Aurora DB clusters only
	//
	// Valid Values: IPV4 | DUAL
	NetworkType *string `json:"networkType,omitempty"`
	// The option group to associate the DB cluster with.
	//
	// DB clusters are associated with a default option group that can't be modified.
	OptionGroupName *string `json:"optionGroupName,omitempty"`
	// The Amazon Web Services KMS key identifier for encryption of Performance
	// Insights data.
	//
	// The Amazon Web Services KMS key identifier is the key ARN, key ID, alias
	// ARN, or alias name for the KMS key.
	//
	// If you don't specify a value for PerformanceInsightsKMSKeyId, then Amazon
	// RDS uses your default KMS key. There is a default KMS key for your Amazon
	// Web Services account. Your Amazon Web Services account has a different default
	// KMS key for each Amazon Web Services Region.
	//
	// Valid for Cluster Type: Multi-AZ DB clusters only
	PerformanceInsightsKMSKeyID *string `json:"performanceInsightsKMSKeyID,omitempty"`
	// The number of days to retain Performance Insights data.
	//
	// Valid for Cluster Type: Multi-AZ DB clusters only
	//
	// Valid Values:
	//
	//   - 7
	//
	//   - month * 31, where month is a number of months from 1-23. Examples: 93
	//     (3 months * 31), 341 (11 months * 31), 589 (19 months * 31)
	//
	//   - 731
	//
	// Default: 7 days
	//
	// If you specify a retention period that isn't valid, such as 94, Amazon RDS
	// issues an error.
	PerformanceInsightsRetentionPeriod *int64 `json:"performanceInsightsRetentionPeriod,omitempty"`
	// The port number on which the instances in the DB cluster accept connections.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	//
	// Valid Values: 1150-65535
	//
	// Default:
	//
	//   - RDS for MySQL and Aurora MySQL - 3306
	//
	//   - RDS for PostgreSQL and Aurora PostgreSQL - 5432
	Port *int64 `json:"port,omitempty"`
	// When you are replicating a DB cluster from one Amazon Web Services GovCloud
	// (US) Region to another, an URL that contains a Signature Version 4 signed
	// request for the CreateDBCluster operation to be called in the source Amazon
	// Web Services Region where the DB cluster is replicated from. Specify PreSignedUrl
	// only when you are performing cross-Region replication from an encrypted DB
	// cluster.
	//
	// The presigned URL must be a valid request for the CreateDBCluster API operation
	// that can run in the source Amazon Web Services Region that contains the encrypted
	// DB cluster to copy.
	//
	// The presigned URL request must contain the following parameter values:
	//
	//   - KmsKeyId - The KMS key identifier for the KMS key to use to encrypt
	//     the copy of the DB cluster in the destination Amazon Web Services Region.
	//     This should refer to the same KMS key for both the CreateDBCluster operation
	//     that is called in the destination Amazon Web Services Region, and the
	//     operation contained in the presigned URL.
	//
	//   - DestinationRegion - The name of the Amazon Web Services Region that
	//     Aurora read replica will be created in.
	//
	//   - ReplicationSourceIdentifier - The DB cluster identifier for the encrypted
	//     DB cluster to be copied. This identifier must be in the Amazon Resource
	//     Name (ARN) format for the source Amazon Web Services Region. For example,
	//     if you are copying an encrypted DB cluster from the us-west-2 Amazon Web
	//     Services Region, then your ReplicationSourceIdentifier would look like
	//     Example: arn:aws:rds:us-west-2:123456789012:cluster:aurora-cluster1.
	//
	// To learn how to generate a Signature Version 4 signed request, see Authenticating
	// Requests: Using Query Parameters (Amazon Web Services Signature Version 4)
	// (https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html)
	// and Signature Version 4 Signing Process (https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html).
	//
	// If you are using an Amazon Web Services SDK tool or the CLI, you can specify
	// SourceRegion (or --source-region for the CLI) instead of specifying PreSignedUrl
	// manually. Specifying SourceRegion autogenerates a presigned URL that is a
	// valid request for the operation that can run in the source Amazon Web Services
	// Region.
	//
	// Valid for Cluster Type: Aurora DB clusters only
	PreSignedURL *string `json:"preSignedURL,omitempty"`
	// The daily time range during which automated backups are created if automated
	// backups are enabled using the BackupRetentionPeriod parameter.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	//
	// The default is a 30-minute window selected at random from an 8-hour block
	// of time for each Amazon Web Services Region. To view the time blocks available,
	// see Backup window (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Managing.Backups.html#Aurora.Managing.Backups.BackupWindow)
	// in the Amazon Aurora User Guide.
	//
	// Constraints:
	//
	//   - Must be in the format hh24:mi-hh24:mi.
	//
	//   - Must be in Universal Coordinated Time (UTC).
	//
	//   - Must not conflict with the preferred maintenance window.
	//
	//   - Must be at least 30 minutes.
	PreferredBackupWindow *string `json:"preferredBackupWindow,omitempty"`
	// The weekly time range during which system maintenance can occur.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	//
	// The default is a 30-minute window selected at random from an 8-hour block
	// of time for each Amazon Web Services Region, occurring on a random day of
	// the week. To see the time blocks available, see Adjusting the Preferred DB
	// Cluster Maintenance Window (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_UpgradeDBInstance.Maintenance.html#AdjustingTheMaintenanceWindow.Aurora)
	// in the Amazon Aurora User Guide.
	//
	// Constraints:
	//
	//   - Must be in the format ddd:hh24:mi-ddd:hh24:mi.
	//
	//   - Days must be one of Mon | Tue | Wed | Thu | Fri | Sat | Sun.
	//
	//   - Must be in Universal Coordinated Time (UTC).
	//
	//   - Must be at least 30 minutes.
	PreferredMaintenanceWindow *string `json:"preferredMaintenanceWindow,omitempty"`
	// Specifies whether the DB cluster is publicly accessible.
	//
	// When the DB cluster is publicly accessible and you connect from outside of
	// the DB cluster's virtual private cloud (VPC), its Domain Name System (DNS)
	// endpoint resolves to the public IP address. When you connect from within
	// the same VPC as the DB cluster, the endpoint resolves to the private IP address.
	// Access to the DB cluster is ultimately controlled by the security group it
	// uses. That public access isn't permitted if the security group assigned to
	// the DB cluster doesn't permit it.
	//
	// When the DB cluster isn't publicly accessible, it is an internal DB cluster
	// with a DNS name that resolves to a private IP address.
	//
	// Valid for Cluster Type: Multi-AZ DB clusters only
	//
	// Default: The default behavior varies depending on whether DBSubnetGroupName
	// is specified.
	//
	// If DBSubnetGroupName isn't specified, and PubliclyAccessible isn't specified,
	// the following applies:
	//
	//   - If the default VPC in the target Region doesn’t have an internet gateway
	//     attached to it, the DB cluster is private.
	//
	//   - If the default VPC in the target Region has an internet gateway attached
	//     to it, the DB cluster is public.
	//
	// If DBSubnetGroupName is specified, and PubliclyAccessible isn't specified,
	// the following applies:
	//
	//   - If the subnets are part of a VPC that doesn’t have an internet gateway
	//     attached to it, the DB cluster is private.
	//
	//   - If the subnets are part of a VPC that has an internet gateway attached
	//     to it, the DB cluster is public.
	PubliclyAccessible *bool `json:"publiclyAccessible,omitempty"`
	// The Amazon Resource Name (ARN) of the source DB instance or DB cluster if
	// this DB cluster is created as a read replica.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	ReplicationSourceIdentifier *string `json:"replicationSourceIdentifier,omitempty"`
	// The date and time to restore the DB cluster to.
	//
	// Valid Values: Value must be a time in Universal Coordinated Time (UTC) format
	//
	// Constraints:
	//
	//   - Must be before the latest restorable time for the DB instance
	//
	//   - Must be specified if UseLatestRestorableTime parameter isn't provided
	//
	//   - Can't be specified if the UseLatestRestorableTime parameter is enabled
	//
	//   - Can't be specified if the RestoreType parameter is copy-on-write
	//
	// Example: 2015-03-07T23:45:00Z
	//
	// Valid for: Aurora DB clusters and Multi-AZ DB clusters
	RestoreToTime *metav1.Time `json:"restoreToTime,omitempty"`
	// The type of restore to be performed. You can specify one of the following
	// values:
	//
	//   - full-copy - The new DB cluster is restored as a full copy of the source
	//     DB cluster.
	//
	//   - copy-on-write - The new DB cluster is restored as a clone of the source
	//     DB cluster.
	//
	// If you don't specify a RestoreType value, then the new DB cluster is restored
	// as a full copy of the source DB cluster.
	//
	// Valid for: Aurora DB clusters and Multi-AZ DB clusters
	RestoreType *string `json:"restoreType,omitempty"`
	// For DB clusters in serverless DB engine mode, the scaling properties of the
	// DB cluster.
	//
	// Valid for Cluster Type: Aurora DB clusters only
	ScalingConfiguration             *ScalingConfiguration             `json:"scalingConfiguration,omitempty"`
	ServerlessV2ScalingConfiguration *ServerlessV2ScalingConfiguration `json:"serverlessV2ScalingConfiguration,omitempty"`
	// The identifier for the DB snapshot or DB cluster snapshot to restore from.
	//
	// You can use either the name or the Amazon Resource Name (ARN) to specify
	// a DB cluster snapshot. However, you can use only the ARN to specify a DB
	// snapshot.
	//
	// Constraints:
	//
	//   - Must match the identifier of an existing Snapshot.
	//
	// Valid for: Aurora DB clusters and Multi-AZ DB clusters
	SnapshotIdentifier *string `json:"snapshotIdentifier,omitempty"`
	// The identifier of the source DB cluster from which to restore.
	//
	// Constraints:
	//
	//   - Must match the identifier of an existing DBCluster.
	//
	// Valid for: Aurora DB clusters and Multi-AZ DB clusters
	SourceDBClusterIdentifier *string `json:"sourceDBClusterIdentifier,omitempty"`
	// SourceRegion is the source region where the resource exists. This is not
	// sent over the wire and is only used for presigning. This value should always
	// have the same region as the source ARN.
	SourceRegion *string `json:"sourceRegion,omitempty"`
	// Specifies whether the DB cluster is encrypted.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	StorageEncrypted *bool `json:"storageEncrypted,omitempty"`
	// The storage type to associate with the DB cluster.
	//
	// For information on storage types for Aurora DB clusters, see Storage configurations
	// for Amazon Aurora DB clusters (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.StorageReliability.html#aurora-storage-type).
	// For information on storage types for Multi-AZ DB clusters, see Settings for
	// creating Multi-AZ DB clusters (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/create-multi-az-db-cluster.html#create-multi-az-db-cluster-settings).
	//
	// This setting is required to create a Multi-AZ DB cluster.
	//
	// When specified for a Multi-AZ DB cluster, a value for the Iops parameter
	// is required.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	//
	// Valid Values:
	//
	//   - Aurora DB clusters - aurora | aurora-iopt1
	//
	//   - Multi-AZ DB clusters - io1 | io2 | gp3
	//
	// Default:
	//
	//   - Aurora DB clusters - aurora
	//
	//   - Multi-AZ DB clusters - io1
	//
	// When you create an Aurora DB cluster with the storage type set to aurora-iopt1,
	// the storage type is returned in the response. The storage type isn't returned
	// when you set it to aurora.
	StorageType *string `json:"storageType,omitempty"`
	// Tags to assign to the DB cluster.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	Tags []*Tag `json:"tags,omitempty"`
	// Specifies whether to restore the DB cluster to the latest restorable backup
	// time. By default, the DB cluster isn't restored to the latest restorable
	// backup time.
	//
	// Constraints: Can't be specified if RestoreToTime parameter is provided.
	//
	// Valid for: Aurora DB clusters and Multi-AZ DB clusters
	UseLatestRestorableTime *bool `json:"useLatestRestorableTime,omitempty"`
	// A list of EC2 VPC security groups to associate with this DB cluster.
	//
	// Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters
	VPCSecurityGroupIDs  []*string                                  `json:"vpcSecurityGroupIDs,omitempty"`
	VPCSecurityGroupRefs []*ackv1alpha1.AWSResourceReferenceWrapper `json:"vpcSecurityGroupRefs,omitempty"`
}

// DBClusterStatus defines the observed state of DBCluster
type DBClusterStatus struct {
	// All CRs managed by ACK have a common `Status.ACKResourceMetadata` member
	// that is used to contain resource sync state, account ownership,
	// constructed ARN for the resource
	// +kubebuilder:validation:Optional
	ACKResourceMetadata *ackv1alpha1.ResourceMetadata `json:"ackResourceMetadata"`
	// All CRs managed by ACK have a common `Status.Conditions` member that
	// contains a collection of `ackv1alpha1.Condition` objects that describe
	// the various terminal states of the CR and its backend AWS service API
	// resource
	// +kubebuilder:validation:Optional
	Conditions []*ackv1alpha1.Condition `json:"conditions"`
	// The name of the Amazon Kinesis data stream used for the database activity
	// stream.
	// +kubebuilder:validation:Optional
	ActivityStreamKinesisStreamName *string `json:"activityStreamKinesisStreamName,omitempty"`
	// The Amazon Web Services KMS key identifier used for encrypting messages in
	// the database activity stream.
	//
	// The Amazon Web Services KMS key identifier is the key ARN, key ID, alias
	// ARN, or alias name for the KMS key.
	// +kubebuilder:validation:Optional
	ActivityStreamKMSKeyID *string `json:"activityStreamKMSKeyID,omitempty"`
	// The mode of the database activity stream. Database events such as a change
	// or access generate an activity stream event. The database session can handle
	// these events either synchronously or asynchronously.
	// +kubebuilder:validation:Optional
	ActivityStreamMode *string `json:"activityStreamMode,omitempty"`
	// The status of the database activity stream.
	// +kubebuilder:validation:Optional
	ActivityStreamStatus *string `json:"activityStreamStatus,omitempty"`
	// A list of the Amazon Web Services Identity and Access Management (IAM) roles
	// that are associated with the DB cluster. IAM roles that are associated with
	// a DB cluster grant permission for the DB cluster to access other Amazon Web
	// Services on your behalf.
	// +kubebuilder:validation:Optional
	AssociatedRoles []*DBClusterRole `json:"associatedRoles,omitempty"`
	// The time when a stopped DB cluster is restarted automatically.
	// +kubebuilder:validation:Optional
	AutomaticRestartTime *metav1.Time `json:"automaticRestartTime,omitempty"`
	// The number of change records stored for Backtrack.
	// +kubebuilder:validation:Optional
	BacktrackConsumedChangeRecords *int64 `json:"backtrackConsumedChangeRecords,omitempty"`
	// The current capacity of an Aurora Serverless v1 DB cluster. The capacity
	// is 0 (zero) when the cluster is paused.
	//
	// For more information about Aurora Serverless v1, see Using Amazon Aurora
	// Serverless v1 (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html)
	// in the Amazon Aurora User Guide.
	// +kubebuilder:validation:Optional
	Capacity *int64 `json:"capacity,omitempty"`
	// The ID of the clone group with which the DB cluster is associated.
	// +kubebuilder:validation:Optional
	CloneGroupID *string `json:"cloneGroupID,omitempty"`
	// The time when the DB cluster was created, in Universal Coordinated Time (UTC).
	// +kubebuilder:validation:Optional
	ClusterCreateTime *metav1.Time `json:"clusterCreateTime,omitempty"`
	// Indicates whether the DB cluster is a clone of a DB cluster owned by a different
	// Amazon Web Services account.
	// +kubebuilder:validation:Optional
	CrossAccountClone *bool `json:"crossAccountClone,omitempty"`
	// The custom endpoints associated with the DB cluster.
	// +kubebuilder:validation:Optional
	CustomEndpoints []*string `json:"customEndpoints,omitempty"`
	// The list of DB instances that make up the DB cluster.
	// +kubebuilder:validation:Optional
	DBClusterMembers []*DBClusterMember `json:"dbClusterMembers,omitempty"`
	// The list of option group memberships for this DB cluster.
	// +kubebuilder:validation:Optional
	DBClusterOptionGroupMemberships []*DBClusterOptionGroupStatus `json:"dbClusterOptionGroupMemberships,omitempty"`
	// The name of the DB cluster parameter group for the DB cluster.
	// +kubebuilder:validation:Optional
	DBClusterParameterGroup *string `json:"dbClusterParameterGroup,omitempty"`
	// Information about the subnet group associated with the DB cluster, including
	// the name, description, and subnets in the subnet group.
	// +kubebuilder:validation:Optional
	DBSubnetGroup *string `json:"dbSubnetGroup,omitempty"`
	// The Amazon Web Services Region-unique, immutable identifier for the DB cluster.
	// This identifier is found in Amazon Web Services CloudTrail log entries whenever
	// the KMS key for the DB cluster is accessed.
	// +kubebuilder:validation:Optional
	DBClusterResourceID *string `json:"dbClusterResourceID,omitempty"`
	// The Active Directory Domain membership records associated with the DB cluster.
	// +kubebuilder:validation:Optional
	DomainMemberships []*DomainMembership `json:"domainMemberships,omitempty"`
	// The earliest time to which a DB cluster can be backtracked.
	// +kubebuilder:validation:Optional
	EarliestBacktrackTime *metav1.Time `json:"earliestBacktrackTime,omitempty"`
	// The earliest time to which a database can be restored with point-in-time
	// restore.
	// +kubebuilder:validation:Optional
	EarliestRestorableTime *metav1.Time `json:"earliestRestorableTime,omitempty"`
	// A list of log types that this DB cluster is configured to export to CloudWatch
	// Logs.
	//
	// Log types vary by DB engine. For information about the log types for each
	// DB engine, see Amazon RDS Database Log Files (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html)
	// in the Amazon Aurora User Guide.
	// +kubebuilder:validation:Optional
	EnabledCloudwatchLogsExports []*string `json:"enabledCloudwatchLogsExports,omitempty"`
	// The connection endpoint for the primary instance of the DB cluster.
	// +kubebuilder:validation:Optional
	Endpoint *string `json:"endpoint,omitempty"`
	// Indicates whether write forwarding is enabled for a secondary cluster in
	// an Aurora global database. Because write forwarding takes time to enable,
	// check the value of GlobalWriteForwardingStatus to confirm that the request
	// has completed before using the write forwarding feature for this cluster.
	// +kubebuilder:validation:Optional
	GlobalWriteForwardingRequested *bool `json:"globalWriteForwardingRequested,omitempty"`
	// The status of write forwarding for a secondary cluster in an Aurora global
	// database.
	// +kubebuilder:validation:Optional
	GlobalWriteForwardingStatus *string `json:"globalWriteForwardingStatus,omitempty"`
	// The ID that Amazon Route 53 assigns when you create a hosted zone.
	// +kubebuilder:validation:Optional
	HostedZoneID *string `json:"hostedZoneID,omitempty"`
	// Indicates whether the HTTP endpoint is enabled for an Aurora DB cluster.
	//
	// When enabled, the HTTP endpoint provides a connectionless web service API
	// (RDS Data API) for running SQL queries on the DB cluster. You can also query
	// your database from inside the RDS console with the RDS query editor.
	//
	// For more information, see Using RDS Data API (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api.html)
	// in the Amazon Aurora User Guide.
	// +kubebuilder:validation:Optional
	HTTPEndpointEnabled *bool `json:"httpEndpointEnabled,omitempty"`
	// Indicates whether the mapping of Amazon Web Services Identity and Access
	// Management (IAM) accounts to database accounts is enabled.
	// +kubebuilder:validation:Optional
	IAMDatabaseAuthenticationEnabled *bool `json:"iamDatabaseAuthenticationEnabled,omitempty"`
	// The latest time to which a database can be restored with point-in-time restore.
	// +kubebuilder:validation:Optional
	LatestRestorableTime *metav1.Time `json:"latestRestorableTime,omitempty"`
	// The secret managed by RDS in Amazon Web Services Secrets Manager for the
	// master user password.
	//
	// For more information, see Password management with Amazon Web Services Secrets
	// Manager (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html)
	// in the Amazon RDS User Guide and Password management with Amazon Web Services
	// Secrets Manager (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html)
	// in the Amazon Aurora User Guide.
	// +kubebuilder:validation:Optional
	MasterUserSecret *MasterUserSecret `json:"masterUserSecret,omitempty"`
	// Indicates whether the DB cluster has instances in multiple Availability Zones.
	// +kubebuilder:validation:Optional
	MultiAZ *bool `json:"multiAZ,omitempty"`
	// Information about pending changes to the DB cluster. This information is
	// returned only when there are pending changes. Specific changes are identified
	// by subelements.
	// +kubebuilder:validation:Optional
	PendingModifiedValues *ClusterPendingModifiedValues `json:"pendingModifiedValues,omitempty"`
	// The progress of the operation as a percentage.
	// +kubebuilder:validation:Optional
	PercentProgress *string `json:"percentProgress,omitempty"`
	// Indicates whether Performance Insights is enabled for the DB cluster.
	//
	// This setting is only for non-Aurora Multi-AZ DB clusters.
	// +kubebuilder:validation:Optional
	PerformanceInsightsEnabled *bool `json:"performanceInsightsEnabled,omitempty"`
	// Contains one or more identifiers of the read replicas associated with this
	// DB cluster.
	// +kubebuilder:validation:Optional
	ReadReplicaIdentifiers []*string `json:"readReplicaIdentifiers,omitempty"`
	// The reader endpoint for the DB cluster. The reader endpoint for a DB cluster
	// load-balances connections across the Aurora Replicas that are available in
	// a DB cluster. As clients request new connections to the reader endpoint,
	// Aurora distributes the connection requests among the Aurora Replicas in the
	// DB cluster. This functionality can help balance your read workload across
	// multiple Aurora Replicas in your DB cluster.
	//
	// If a failover occurs, and the Aurora Replica that you are connected to is
	// promoted to be the primary instance, your connection is dropped. To continue
	// sending your read workload to other Aurora Replicas in the cluster, you can
	// then reconnect to the reader endpoint.
	// +kubebuilder:validation:Optional
	ReaderEndpoint *string `json:"readerEndpoint,omitempty"`
	// The current state of this DB cluster.
	// +kubebuilder:validation:Optional
	Status *string `json:"status,omitempty"`
	// +kubebuilder:validation:Optional
	TagList []*Tag `json:"tagList,omitempty"`
	// The list of VPC security groups that the DB cluster belongs to.
	// +kubebuilder:validation:Optional
	VPCSecurityGroups []*VPCSecurityGroupMembership `json:"vpcSecurityGroups,omitempty"`
}

// DBCluster is the Schema for the DBClusters API
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
type DBCluster struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`
	Spec              DBClusterSpec   `json:"spec,omitempty"`
	Status            DBClusterStatus `json:"status,omitempty"`
}

// DBClusterList contains a list of DBCluster
// +kubebuilder:object:root=true
type DBClusterList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []DBCluster `json:"items"`
}

func init() {
	SchemeBuilder.Register(&DBCluster{}, &DBClusterList{})
}
