import * as outputs from "../types/output";
export interface ClusterBackupConfig {
    /**
     * Indicates whether backups are enabled. If set to false, no backups will be created.
     */
    enabled: boolean;
    /**
     * The frequency of backups in minutes.  Valid values are [5, 10, 15, 30, 60, 240, 1440]
     */
    frequencyMinutes: number;
    /**
     * The number of days to retain backups for.  Valid values are [2, 7, 30, 90, 365]. Can only be set once, further changes require opening a support ticket. See Updating backup retention for more information.
     */
    retentionDays: number;
}
export interface ClusterDedicated {
    /**
     * The IPv4 range in CIDR format that will be used by the cluster. This is supported only on GCP, and must have a subnet mask no larger than /19. Defaults to "172.28.0.0/14". This cannot be changed after cluster creation.
     */
    cidrRange: string;
    /**
     * Number of disk I/O operations per second that are permitted on each node in the cluster. Omitting this attribute will result in the cloud provider-specific default.
     */
    diskIops: number;
    /**
     * Machine type identifier within the given cloud provider, e.g., m6.xlarge, n2-standard-4. This attribute requires a feature flag to be enabled. It is recommended to leave this empty and use `numVirtualCpus` to control the machine type.
     */
    machineType: string;
    /**
     * Memory per node in GiB.
     */
    memoryGib: number;
    /**
     * Number of virtual CPUs per node in the cluster.
     */
    numVirtualCpus: number;
    /**
     * Set to true to assign private IP addresses to nodes. Required for CMEK and other advanced networking features. Clusters created with this flag will have advanced security features enabled.  This cannot be changed after cluster creation and incurs additional charges.  See [Create an Advanced Cluster](https://www.cockroachlabs.com/docs/cockroachcloud/create-an-advanced-cluster.html#step-6-configure-advanced-security-features) and [Pricing](https://www.cockroachlabs.com/pricing/) for more information.
     */
    privateNetworkVisibility: boolean;
    /**
     * Storage amount per node in GiB.
     */
    storageGib: number;
}
export interface ClusterRegion {
    /**
     * Internal DNS name of the cluster within the cloud provider's network. Used to connect to the cluster with PrivateLink or VPC peering.
     */
    internalDns: string;
    /**
     * Name of the region. Should match the region code used by the cluster's cloud provider.
     */
    name: string;
    /**
     * Number of nodes in the region. Valid for Advanced clusters only.
     */
    nodeCount: number;
    /**
     * Set to true to mark this region as the primary for a serverless cluster. Exactly one region must be primary. Dedicated clusters expect to have no primary region.
     */
    primary: boolean;
    /**
     * DNS name of the cluster's SQL interface. Used to connect to the cluster with IP allowlisting.
     */
    sqlDns: string;
    /**
     * DNS name used when connecting to the DB Console for the cluster.
     */
    uiDns: string;
}
export interface ClusterServerless {
    /**
     * Cluster identifier in a connection string.
     */
    routingId: string;
    /**
     * Spend limit in US cents.
     *
     * @deprecated The `spendLimit` attribute is deprecated and will be removed in a future release of the provider. Configure 'usage_limits' instead.
     */
    spendLimit?: number;
    /**
     * Dictates the behavior of CockroachDB major version upgrades. Manual upgrades are not supported on CockroachDB Basic. Manual or automatic upgrades are supported on CockroachDB Standard. If you omit the field, it defaults to `AUTOMATIC`. Allowed values are:
     *   * MANUAL
     *   * AUTOMATIC
     */
    upgradeType: string;
    usageLimits?: outputs.ClusterServerlessUsageLimits;
}
export interface ClusterServerlessUsageLimits {
    /**
     * Maximum number of vCPUs that the cluster can use.
     */
    provisionedVirtualCpus?: number;
    /**
     * Maximum number of Request Units that the cluster can consume during the month.
     */
    requestUnitLimit?: number;
    /**
     * Maximum amount of storage (in MiB) that the cluster can have at any time during the month.
     */
    storageMibLimit?: number;
}
export interface CmekAdditionalRegion {
    /**
     * Internal DNS name of the cluster within the cloud provider's network. Used to connect to the cluster with PrivateLink or VPC peering.
     */
    internalDns: string;
    /**
     * Name of the region. Should match the region code used by the cluster's cloud provider.
     */
    name: string;
    /**
     * Number of nodes in the region. Valid for Advanced clusters only.
     */
    nodeCount: number;
    /**
     * Set to true to mark this region as the primary for a serverless cluster. Exactly one region must be primary. Dedicated clusters expect to have no primary region.
     */
    primary: boolean;
    /**
     * DNS name of the cluster's SQL interface. Used to connect to the cluster with IP allowlisting.
     */
    sqlDns: string;
    /**
     * DNS name used when connecting to the DB Console for the cluster.
     */
    uiDns: string;
}
export interface CmekRegion {
    key: outputs.CmekRegionKey;
    /**
     * Cloud provider region code.
     */
    region: string;
    /**
     * Describes the status of the current encryption key within the region.
     */
    status: string;
}
export interface CmekRegionKey {
    /**
     * Principal to authenticate as in order to access the key.
     */
    authPrincipal: string;
    /**
     * Indicates when the key was created.
     */
    createdAt: string;
    /**
     * Current status of this key.
     */
    status: string;
    /**
     * Type of encryption key. Current allowed values are:
     *   * AWS_KMS
     *   * GCP_CLOUD_KMS
     *   * NULL_KMS
     */
    type: string;
    /**
     * Indicates when the key was last updated.
     */
    updatedAt: string;
    /**
     * Provider-specific URI pointing to the encryption key.
     */
    uri: string;
    /**
     * Elaborates on the key's status and hints at how to fix issues that may have occurred during asynchronous key operations.
     */
    userMessage: string;
}
export interface GetCockroachClusterBackupConfig {
    /**
     * Indicates whether backups are enabled.
     */
    enabled: boolean;
    /**
     * The frequency of backups in minutes.
     */
    frequencyMinutes: number;
    /**
     * The number of days to retain backups for.
     */
    retentionDays: number;
}
export interface GetCockroachClusterDedicated {
    /**
     * The IPv4 range in CIDR format that is in use by the cluster. It is only set on GCP clusters and is otherwise empty.
     */
    cidrRange: string;
    /**
     * Number of disk I/O operations per second that are permitted on each node in the cluster. Zero indicates the cloud provider-specific default.
     */
    diskIops: number;
    /**
     * Machine type identifier within the given cloud provider, ex. m6.xlarge, n2-standard-4.
     */
    machineType: string;
    /**
     * Memory per node in GiB.
     */
    memoryGib: number;
    /**
     * Number of virtual CPUs per node in the cluster.
     */
    numVirtualCpus: number;
    /**
     * Indicates whether private IP addresses are assigned to nodes. Required for CMEK and other advanced networking features.
     */
    privateNetworkVisibility: boolean;
    /**
     * Storage amount per node in GiB.
     */
    storageGib: number;
}
export interface GetCockroachClusterRegion {
    /**
     * Internal DNS name of the cluster within the cloud provider's network. Used to connect to the cluster with PrivateLink or VPC peering.
     */
    internalDns: string;
    /**
     * Region code used by the cluster's cloud provider.
     */
    name: string;
    /**
     * Number of nodes in the region. Will always be 0 for serverless clusters.
     */
    nodeCount: number;
    /**
     * Denotes whether this is the primary region in a serverless cluster. Dedicated clusters don't have a primary region.
     */
    primary: boolean;
    /**
     * DNS name of the cluster's SQL interface. Used to connect to the cluster with IP allowlisting.
     */
    sqlDns: string;
    /**
     * DNS name used when connecting to the DB Console for the cluster.
     */
    uiDns: string;
}
export interface GetCockroachClusterServerless {
    /**
     * Cluster identifier in a connection string.
     */
    routingId: string;
    /**
     * Spend limit in US cents.
     *
     * @deprecated The `spendLimit` attribute is deprecated and will be removed in a future release of the provider. Configure 'usage_limits' instead.
     */
    spendLimit: number;
    /**
     * Dictates the behavior of CockroachDB major version upgrades.
     */
    upgradeType: string;
    usageLimits: outputs.GetCockroachClusterServerlessUsageLimits;
}
export interface GetCockroachClusterServerlessUsageLimits {
    /**
     * Maximum number of vCPUs that the cluster can use.
     */
    provisionedVirtualCpus: number;
    /**
     * Maximum number of Request Units that the cluster can consume during the month.
     */
    requestUnitLimit: number;
    /**
     * Maximum amount of storage (in MiB) that the cluster can have at any time during the month.
     */
    storageMibLimit: number;
}
export interface GetConnectionStringConnectionParams {
    /**
     * Database value to use in a connection URL.
     */
    database: string;
    /**
     * Host value to use in a connection URL.
     */
    host: string;
    /**
     * Password value to use in a connection URL.
     */
    password: string;
    /**
     * Port value to use in a connection URL.
     */
    port: string;
    /**
     * Username value to use in a connection URL.
     */
    username: string;
}
export interface JwtIssuerIdentityMap {
    /**
     * Specifies how to map the fetched token identity to an identity in CockroachDB Cloud. In case of a regular expression for token_identity, this must contain a \1 placeholder for the matched content. Note that you will need to escape the backslash in the string as in the example usage (\\1).
     */
    ccIdentity: string;
    /**
     * Specifies how to fetch external identity from the token claim. A regular expression must start with a forward slash. The regular expression must be in RE2 compatible syntax. For further details, please see https://github.com/google/re2/wiki/Syntax.
     */
    tokenIdentity: string;
}
export interface LogExportConfigGroup {
    /**
     * A list of CockroachDB log channels to include in this group.
     */
    channels: string[];
    /**
     * The name of the group, reflected in the log sink.
     */
    logName: string;
    /**
     * The minimum log level to filter to this log group.
     */
    minLevel?: string;
    /**
     * Governs whether this log group should aggregate redacted logs if unset.
     */
    redact?: boolean;
}
export interface PrivateEndpointServicesService {
    /**
     * Availability Zone IDs of the private endpoint service. It is recommended, for cost optimization purposes, to create the private endpoint spanning these same availability zones. For more information, see data transfer cost information for your cloud provider.
     */
    availabilityZoneIds: string[];
    /**
     * @deprecated nested aws fields have been moved one level up. These fields will be removed in a future version
     */
    aws: outputs.PrivateEndpointServicesServiceAws;
    /**
     * Cloud provider associated with this service.
     */
    cloudProvider: string;
    /**
     * Server side ID of the private endpoint connection.
     */
    endpointServiceId: string;
    /**
     * Name of the endpoint service.
     */
    name: string;
    /**
     * Cloud provider region code associated with this service.
     */
    regionName: string;
    /**
     * Operation status of the service.
     */
    status: string;
}
export interface PrivateEndpointServicesServiceAws {
    /**
     * AZ IDs users should create their VPCs in to minimize their cost.
     */
    availabilityZoneIds: string[];
    /**
     * Server side ID of the PrivateLink connection.
     */
    serviceId: string;
    /**
     * AWS service name used to create endpoints.
     */
    serviceName: string;
}
export interface PrivateEndpointServicesServicesMap {
    /**
     * Availability Zone IDs of the private endpoint service. It is recommended, for cost optimization purposes, to create the private endpoint spanning these same availability zones. For more information, see data transfer cost information for your cloud provider.
     */
    availabilityZoneIds: string[];
    /**
     * @deprecated nested aws fields have been moved one level up. These fields will be removed in a future version
     */
    aws: outputs.PrivateEndpointServicesServicesMapAws;
    /**
     * Cloud provider associated with this service.
     */
    cloudProvider: string;
    /**
     * Server side ID of the private endpoint connection.
     */
    endpointServiceId: string;
    /**
     * Name of the endpoint service.
     */
    name: string;
    /**
     * Cloud provider region code associated with this service.
     */
    regionName: string;
    /**
     * Operation status of the service.
     */
    status: string;
}
export interface PrivateEndpointServicesServicesMapAws {
    /**
     * AZ IDs users should create their VPCs in to minimize their cost.
     */
    availabilityZoneIds: string[];
    /**
     * Server side ID of the PrivateLink connection.
     */
    serviceId: string;
    /**
     * AWS service name used to create endpoints.
     */
    serviceName: string;
}
export interface UserRoleGrantRole {
    /**
     * ID of the resource. Required if the resourceType is 'FOLDER' or 'CLUSTER'. It should be omitted otherwise.
     */
    resourceId?: string;
    /**
     * Type of resource. Allowed values are:
     *   * ORGANIZATION
     *   * CLUSTER
     *   * FOLDER
     */
    resourceType: string;
    /**
     * Name of the role to grant. Allowed values are:
     *   * BILLING_COORDINATOR
     *   * ORG_ADMIN
     *   * ORG_MEMBER
     *   * CLUSTER_ADMIN
     *   * CLUSTER_OPERATOR_WRITER
     *   * CLUSTER_DEVELOPER
     *   * CLUSTER_CREATOR
     *   * FOLDER_ADMIN
     *   * FOLDER_MOVER
     */
    roleName: string;
}
export interface UserRoleGrantsRole {
    /**
     * ID of the resource. Required if the resourceType is 'FOLDER' or 'CLUSTER'. It should be omitted otherwise.
     */
    resourceId?: string;
    /**
     * Type of resource. Allowed values are:
     *   * ORGANIZATION
     *   * CLUSTER
     *   * FOLDER
     */
    resourceType: string;
    /**
     * Name of the role to grant. Allowed values are:
     *   * BILLING_COORDINATOR
     *   * ORG_ADMIN
     *   * ORG_MEMBER
     *   * CLUSTER_ADMIN
     *   * CLUSTER_OPERATOR_WRITER
     *   * CLUSTER_DEVELOPER
     *   * CLUSTER_CREATOR
     *   * FOLDER_ADMIN
     *   * FOLDER_MOVER
     */
    roleName: string;
}
