All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.mongodbatlas.ClusterArgs Maven / Gradle / Ivy

// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.mongodbatlas;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.exceptions.MissingRequiredPropertyException;
import com.pulumi.mongodbatlas.inputs.ClusterAdvancedConfigurationArgs;
import com.pulumi.mongodbatlas.inputs.ClusterBiConnectorConfigArgs;
import com.pulumi.mongodbatlas.inputs.ClusterLabelArgs;
import com.pulumi.mongodbatlas.inputs.ClusterReplicationSpecArgs;
import com.pulumi.mongodbatlas.inputs.ClusterTagArgs;
import java.lang.Boolean;
import java.lang.Double;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class ClusterArgs extends com.pulumi.resources.ResourceArgs {

    public static final ClusterArgs Empty = new ClusterArgs();

    /**
     * If reconfiguration is necessary to regain a primary due to a regional outage, submit this field alongside your topology reconfiguration to request a new regional outage resistant topology. Forced reconfigurations during an outage of the majority of electable nodes carry a risk of data loss if replicated writes (even majority committed writes) have not been replicated to the new primary node. MongoDB Atlas docs contain more information. To proceed with an operation which carries that risk, set `accept_data_risks_and_force_replica_set_reconfig` to the current date. Learn more about Reconfiguring a Replica Set during a regional outage [here](https://dochub.mongodb.org/core/regional-outage-reconfigure-replica-set).
     * 
     */
    @Import(name="acceptDataRisksAndForceReplicaSetReconfig")
    private @Nullable Output acceptDataRisksAndForceReplicaSetReconfig;

    /**
     * @return If reconfiguration is necessary to regain a primary due to a regional outage, submit this field alongside your topology reconfiguration to request a new regional outage resistant topology. Forced reconfigurations during an outage of the majority of electable nodes carry a risk of data loss if replicated writes (even majority committed writes) have not been replicated to the new primary node. MongoDB Atlas docs contain more information. To proceed with an operation which carries that risk, set `accept_data_risks_and_force_replica_set_reconfig` to the current date. Learn more about Reconfiguring a Replica Set during a regional outage [here](https://dochub.mongodb.org/core/regional-outage-reconfigure-replica-set).
     * 
     */
    public Optional> acceptDataRisksAndForceReplicaSetReconfig() {
        return Optional.ofNullable(this.acceptDataRisksAndForceReplicaSetReconfig);
    }

    @Import(name="advancedConfiguration")
    private @Nullable Output advancedConfiguration;

    public Optional> advancedConfiguration() {
        return Optional.ofNullable(this.advancedConfiguration);
    }

    @Import(name="autoScalingComputeEnabled")
    private @Nullable Output autoScalingComputeEnabled;

    public Optional> autoScalingComputeEnabled() {
        return Optional.ofNullable(this.autoScalingComputeEnabled);
    }

    /**
     * Set to `true` to enable the cluster tier to scale down. This option is only available if `autoScaling.compute.enabled` is `true`.
     * - If this option is enabled, you must specify a value for `providerSettings.autoScaling.compute.minInstanceSize`
     * 
     */
    @Import(name="autoScalingComputeScaleDownEnabled")
    private @Nullable Output autoScalingComputeScaleDownEnabled;

    /**
     * @return Set to `true` to enable the cluster tier to scale down. This option is only available if `autoScaling.compute.enabled` is `true`.
     * - If this option is enabled, you must specify a value for `providerSettings.autoScaling.compute.minInstanceSize`
     * 
     */
    public Optional> autoScalingComputeScaleDownEnabled() {
        return Optional.ofNullable(this.autoScalingComputeScaleDownEnabled);
    }

    @Import(name="autoScalingDiskGbEnabled")
    private @Nullable Output autoScalingDiskGbEnabled;

    public Optional> autoScalingDiskGbEnabled() {
        return Optional.ofNullable(this.autoScalingDiskGbEnabled);
    }

    /**
     * Cloud service provider on which the server for a multi-tenant cluster is provisioned.
     * 
     * This setting is only valid when providerSetting.providerName is TENANT and providerSetting.instanceSizeName is M2 or M5.
     * 
     * The possible values are:
     * 
     * - AWS - Amazon AWS
     * - GCP - Google Cloud Platform
     * - AZURE - Microsoft Azure
     * 
     */
    @Import(name="backingProviderName")
    private @Nullable Output backingProviderName;

    /**
     * @return Cloud service provider on which the server for a multi-tenant cluster is provisioned.
     * 
     * This setting is only valid when providerSetting.providerName is TENANT and providerSetting.instanceSizeName is M2 or M5.
     * 
     * The possible values are:
     * 
     * - AWS - Amazon AWS
     * - GCP - Google Cloud Platform
     * - AZURE - Microsoft Azure
     * 
     */
    public Optional> backingProviderName() {
        return Optional.ofNullable(this.backingProviderName);
    }

    /**
     * Legacy Backup - Set to true to enable Atlas legacy backups for the cluster.
     * **Important** - MongoDB deprecated the Legacy Backup feature. Clusters that use Legacy Backup can continue to use it. MongoDB recommends using [Cloud Backups](https://docs.atlas.mongodb.com/backup/cloud-backup/overview/).
     * * New Atlas clusters of any type do not support this parameter. These clusters must use Cloud Backup, `cloud_backup`, to enable Cloud Backup.  If you create a new Atlas cluster and set `backup_enabled` to true, the Provider will respond with an error.  This change doesn’t affect existing clusters that use legacy backups.
     * * Setting this value to false to disable legacy backups for the cluster will let Atlas delete any stored snapshots. In order to preserve the legacy backups snapshots, disable the legacy backups and enable the cloud backups in the single **pulumi up** action.
     * * The default value is false.  M10 and above only.
     * 
     */
    @Import(name="backupEnabled")
    private @Nullable Output backupEnabled;

    /**
     * @return Legacy Backup - Set to true to enable Atlas legacy backups for the cluster.
     * **Important** - MongoDB deprecated the Legacy Backup feature. Clusters that use Legacy Backup can continue to use it. MongoDB recommends using [Cloud Backups](https://docs.atlas.mongodb.com/backup/cloud-backup/overview/).
     * * New Atlas clusters of any type do not support this parameter. These clusters must use Cloud Backup, `cloud_backup`, to enable Cloud Backup.  If you create a new Atlas cluster and set `backup_enabled` to true, the Provider will respond with an error.  This change doesn’t affect existing clusters that use legacy backups.
     * * Setting this value to false to disable legacy backups for the cluster will let Atlas delete any stored snapshots. In order to preserve the legacy backups snapshots, disable the legacy backups and enable the cloud backups in the single **pulumi up** action.
     * * The default value is false.  M10 and above only.
     * 
     */
    public Optional> backupEnabled() {
        return Optional.ofNullable(this.backupEnabled);
    }

    /**
     * Specifies BI Connector for Atlas configuration on this cluster. BI Connector for Atlas is only available for M10+ clusters. See BI Connector below for more details.
     * 
     */
    @Import(name="biConnectorConfig")
    private @Nullable Output biConnectorConfig;

    /**
     * @return Specifies BI Connector for Atlas configuration on this cluster. BI Connector for Atlas is only available for M10+ clusters. See BI Connector below for more details.
     * 
     */
    public Optional> biConnectorConfig() {
        return Optional.ofNullable(this.biConnectorConfig);
    }

    @Import(name="cloudBackup")
    private @Nullable Output cloudBackup;

    public Optional> cloudBackup() {
        return Optional.ofNullable(this.cloudBackup);
    }

    /**
     * Specifies the type of the cluster that you want to modify. You cannot convert a sharded cluster deployment to a replica set deployment.
     * 
     * > **WHEN SHOULD YOU USE CLUSTERTYPE?**
     * When you set replication_specs, when you are deploying Global Clusters or when you are deploying non-Global replica sets and sharded clusters.
     * 
     * Accepted values include:
     * - `REPLICASET` Replica set
     * - `SHARDED` Sharded cluster
     * - `GEOSHARDED` Global Cluster
     * 
     */
    @Import(name="clusterType")
    private @Nullable Output clusterType;

    /**
     * @return Specifies the type of the cluster that you want to modify. You cannot convert a sharded cluster deployment to a replica set deployment.
     * 
     * > **WHEN SHOULD YOU USE CLUSTERTYPE?**
     * When you set replication_specs, when you are deploying Global Clusters or when you are deploying non-Global replica sets and sharded clusters.
     * 
     * Accepted values include:
     * - `REPLICASET` Replica set
     * - `SHARDED` Sharded cluster
     * - `GEOSHARDED` Global Cluster
     * 
     */
    public Optional> clusterType() {
        return Optional.ofNullable(this.clusterType);
    }

    /**
     * Capacity, in gigabytes, of the host’s root volume. Increase this number to add capacity, up to a maximum possible value of 4096 (i.e., 4 TB). This value must be a positive integer.
     * * The minimum disk size for dedicated clusters is 10GB for AWS and GCP. If you specify diskSizeGB with a lower disk size, Atlas defaults to the minimum disk size value.
     * * Note: The maximum value for disk storage cannot exceed 50 times the maximum RAM for the selected cluster. If you require additional storage space beyond this limitation, consider upgrading your cluster to a higher tier.
     * * Cannot be used with clusters with local NVMe SSDs
     * * Cannot be used with Azure clusters
     * 
     */
    @Import(name="diskSizeGb")
    private @Nullable Output diskSizeGb;

    /**
     * @return Capacity, in gigabytes, of the host’s root volume. Increase this number to add capacity, up to a maximum possible value of 4096 (i.e., 4 TB). This value must be a positive integer.
     * * The minimum disk size for dedicated clusters is 10GB for AWS and GCP. If you specify diskSizeGB with a lower disk size, Atlas defaults to the minimum disk size value.
     * * Note: The maximum value for disk storage cannot exceed 50 times the maximum RAM for the selected cluster. If you require additional storage space beyond this limitation, consider upgrading your cluster to a higher tier.
     * * Cannot be used with clusters with local NVMe SSDs
     * * Cannot be used with Azure clusters
     * 
     */
    public Optional> diskSizeGb() {
        return Optional.ofNullable(this.diskSizeGb);
    }

    /**
     * Possible values are AWS, GCP, AZURE or NONE.  Only needed if you desire to manage the keys, see [Encryption at Rest using Customer Key Management](https://docs.atlas.mongodb.com/security-aws-kms/) for complete documentation.  You must configure encryption at rest for the Atlas project before enabling it on any cluster in the project. For complete documentation on configuring Encryption at Rest, see Encryption at Rest using Customer Key Management. Requires M10 or greater. and for legacy backups, backup_enabled, to be false or omitted. **Note: Atlas encrypts all cluster storage and snapshot volumes, securing all cluster data on disk: a concept known as encryption at rest, by default**.
     * 
     */
    @Import(name="encryptionAtRestProvider")
    private @Nullable Output encryptionAtRestProvider;

    /**
     * @return Possible values are AWS, GCP, AZURE or NONE.  Only needed if you desire to manage the keys, see [Encryption at Rest using Customer Key Management](https://docs.atlas.mongodb.com/security-aws-kms/) for complete documentation.  You must configure encryption at rest for the Atlas project before enabling it on any cluster in the project. For complete documentation on configuring Encryption at Rest, see Encryption at Rest using Customer Key Management. Requires M10 or greater. and for legacy backups, backup_enabled, to be false or omitted. **Note: Atlas encrypts all cluster storage and snapshot volumes, securing all cluster data on disk: a concept known as encryption at rest, by default**.
     * 
     */
    public Optional> encryptionAtRestProvider() {
        return Optional.ofNullable(this.encryptionAtRestProvider);
    }

    /**
     * Set that contains key-value pairs between 1 to 255 characters in length for tagging and categorizing the cluster. See below. **DEPRECATED** Use `tags` instead.
     * 
     * @deprecated
     * This parameter is deprecated and will be removed in the future. Please transition to tags
     * 
     */
    @Deprecated /* This parameter is deprecated and will be removed in the future. Please transition to tags */
    @Import(name="labels")
    private @Nullable Output> labels;

    /**
     * @return Set that contains key-value pairs between 1 to 255 characters in length for tagging and categorizing the cluster. See below. **DEPRECATED** Use `tags` instead.
     * 
     * @deprecated
     * This parameter is deprecated and will be removed in the future. Please transition to tags
     * 
     */
    @Deprecated /* This parameter is deprecated and will be removed in the future. Please transition to tags */
    public Optional>> labels() {
        return Optional.ofNullable(this.labels);
    }

    /**
     * Version of the cluster to deploy. Atlas supports the following MongoDB versions for M10+ clusters: `4.4`, `5.0`, `6.0` or `7.0`. If omitted, Atlas deploys a cluster that runs MongoDB 7.0. If `provider_instance_size_name`: `M0`, `M2` or `M5`, Atlas deploys MongoDB 5.0. Atlas always deploys the cluster with the latest stable release of the specified version. See [Release Notes](https://www.mongodb.com/docs/upcoming/release-notes/) for latest Current Stable Release.
     * 
     */
    @Import(name="mongoDbMajorVersion")
    private @Nullable Output mongoDbMajorVersion;

    /**
     * @return Version of the cluster to deploy. Atlas supports the following MongoDB versions for M10+ clusters: `4.4`, `5.0`, `6.0` or `7.0`. If omitted, Atlas deploys a cluster that runs MongoDB 7.0. If `provider_instance_size_name`: `M0`, `M2` or `M5`, Atlas deploys MongoDB 5.0. Atlas always deploys the cluster with the latest stable release of the specified version. See [Release Notes](https://www.mongodb.com/docs/upcoming/release-notes/) for latest Current Stable Release.
     * 
     */
    public Optional> mongoDbMajorVersion() {
        return Optional.ofNullable(this.mongoDbMajorVersion);
    }

    /**
     * Name of the cluster as it appears in Atlas. Once the cluster is created, its name cannot be changed. **WARNING** Changing the name will result in destruction of the existing cluster and the creation of a new cluster.
     * 
     */
    @Import(name="name")
    private @Nullable Output name;

    /**
     * @return Name of the cluster as it appears in Atlas. Once the cluster is created, its name cannot be changed. **WARNING** Changing the name will result in destruction of the existing cluster and the creation of a new cluster.
     * 
     */
    public Optional> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * Selects whether the cluster is a replica set or a sharded cluster. If you use the replicationSpecs parameter, you must set num_shards.
     * 
     */
    @Import(name="numShards")
    private @Nullable Output numShards;

    /**
     * @return Selects whether the cluster is a replica set or a sharded cluster. If you use the replicationSpecs parameter, you must set num_shards.
     * 
     */
    public Optional> numShards() {
        return Optional.ofNullable(this.numShards);
    }

    @Import(name="paused")
    private @Nullable Output paused;

    public Optional> paused() {
        return Optional.ofNullable(this.paused);
    }

    /**
     * Flag that indicates if the cluster uses Continuous Cloud Backup. If set to true, cloud_backup must also be set to true.
     * 
     */
    @Import(name="pitEnabled")
    private @Nullable Output pitEnabled;

    /**
     * @return Flag that indicates if the cluster uses Continuous Cloud Backup. If set to true, cloud_backup must also be set to true.
     * 
     */
    public Optional> pitEnabled() {
        return Optional.ofNullable(this.pitEnabled);
    }

    /**
     * The unique ID for the project to create the database user.
     * 
     */
    @Import(name="projectId", required=true)
    private Output projectId;

    /**
     * @return The unique ID for the project to create the database user.
     * 
     */
    public Output projectId() {
        return this.projectId;
    }

    /**
     * Maximum instance size to which your cluster can automatically scale (e.g., M40). Required if `autoScaling.compute.enabled` is `true`.
     * 
     */
    @Import(name="providerAutoScalingComputeMaxInstanceSize")
    private @Nullable Output providerAutoScalingComputeMaxInstanceSize;

    /**
     * @return Maximum instance size to which your cluster can automatically scale (e.g., M40). Required if `autoScaling.compute.enabled` is `true`.
     * 
     */
    public Optional> providerAutoScalingComputeMaxInstanceSize() {
        return Optional.ofNullable(this.providerAutoScalingComputeMaxInstanceSize);
    }

    /**
     * Minimum instance size to which your cluster can automatically scale (e.g., M10). Required if `autoScaling.compute.scaleDownEnabled` is `true`.
     * 
     */
    @Import(name="providerAutoScalingComputeMinInstanceSize")
    private @Nullable Output providerAutoScalingComputeMinInstanceSize;

    /**
     * @return Minimum instance size to which your cluster can automatically scale (e.g., M10). Required if `autoScaling.compute.scaleDownEnabled` is `true`.
     * 
     */
    public Optional> providerAutoScalingComputeMinInstanceSize() {
        return Optional.ofNullable(this.providerAutoScalingComputeMinInstanceSize);
    }

    /**
     * The maximum input/output operations per second (IOPS) the system can perform. The possible values depend on the selected `provider_instance_size_name` and `disk_size_gb`.  This setting requires that `provider_instance_size_name` to be M30 or greater and cannot be used with clusters with local NVMe SSDs.  The default value for `provider_disk_iops` is the same as the cluster tier's Standard IOPS value, as viewable in the Atlas console.  It is used in cases where a higher number of IOPS is needed and possible.  If a value is submitted that is lower or equal to the default IOPS value for the cluster tier Atlas ignores the requested value and uses the default.  More details available under the providerSettings.diskIOPS parameter: [MongoDB API Clusters](https://docs.atlas.mongodb.com/reference/api/clusters-create-one/)
     * * You do not need to configure IOPS for a STANDARD disk configuration but only for a PROVISIONED configuration.
     * 
     */
    @Import(name="providerDiskIops")
    private @Nullable Output providerDiskIops;

    /**
     * @return The maximum input/output operations per second (IOPS) the system can perform. The possible values depend on the selected `provider_instance_size_name` and `disk_size_gb`.  This setting requires that `provider_instance_size_name` to be M30 or greater and cannot be used with clusters with local NVMe SSDs.  The default value for `provider_disk_iops` is the same as the cluster tier's Standard IOPS value, as viewable in the Atlas console.  It is used in cases where a higher number of IOPS is needed and possible.  If a value is submitted that is lower or equal to the default IOPS value for the cluster tier Atlas ignores the requested value and uses the default.  More details available under the providerSettings.diskIOPS parameter: [MongoDB API Clusters](https://docs.atlas.mongodb.com/reference/api/clusters-create-one/)
     * * You do not need to configure IOPS for a STANDARD disk configuration but only for a PROVISIONED configuration.
     * 
     */
    public Optional> providerDiskIops() {
        return Optional.ofNullable(this.providerDiskIops);
    }

    /**
     * Azure disk type of the server’s root volume. If omitted, Atlas uses the default disk type for the selected providerSettings.instanceSizeName.  Example disk types and associated storage sizes: P4 - 32GB, P6 - 64GB, P10 - 128GB, P15 - 256GB, P20 - 512GB, P30 - 1024GB, P40 - 2048GB, P50 - 4095GB.  More information and the most update to date disk types/storage sizes can be located at https://docs.atlas.mongodb.com/reference/api/clusters-create-one/.
     * 
     */
    @Import(name="providerDiskTypeName")
    private @Nullable Output providerDiskTypeName;

    /**
     * @return Azure disk type of the server’s root volume. If omitted, Atlas uses the default disk type for the selected providerSettings.instanceSizeName.  Example disk types and associated storage sizes: P4 - 32GB, P6 - 64GB, P10 - 128GB, P15 - 256GB, P20 - 512GB, P30 - 1024GB, P40 - 2048GB, P50 - 4095GB.  More information and the most update to date disk types/storage sizes can be located at https://docs.atlas.mongodb.com/reference/api/clusters-create-one/.
     * 
     */
    public Optional> providerDiskTypeName() {
        return Optional.ofNullable(this.providerDiskTypeName);
    }

    /**
     * **(Deprecated) The Flag is always true.** Flag that indicates whether the Amazon EBS encryption feature encrypts the host's root volume for both data at rest within the volume and for data moving between the volume and the cluster. Note: This setting is always enabled for clusters with local NVMe SSDs. **Atlas encrypts all cluster storage and snapshot volumes, securing all cluster data on disk: a concept known as encryption at rest, by default.**.
     * 
     * @deprecated
     * All EBS volumes are encrypted by default, the option to disable encryption has been removed
     * 
     */
    @Deprecated /* All EBS volumes are encrypted by default, the option to disable encryption has been removed */
    @Import(name="providerEncryptEbsVolume")
    private @Nullable Output providerEncryptEbsVolume;

    /**
     * @return **(Deprecated) The Flag is always true.** Flag that indicates whether the Amazon EBS encryption feature encrypts the host's root volume for both data at rest within the volume and for data moving between the volume and the cluster. Note: This setting is always enabled for clusters with local NVMe SSDs. **Atlas encrypts all cluster storage and snapshot volumes, securing all cluster data on disk: a concept known as encryption at rest, by default.**.
     * 
     * @deprecated
     * All EBS volumes are encrypted by default, the option to disable encryption has been removed
     * 
     */
    @Deprecated /* All EBS volumes are encrypted by default, the option to disable encryption has been removed */
    public Optional> providerEncryptEbsVolume() {
        return Optional.ofNullable(this.providerEncryptEbsVolume);
    }

    /**
     * Atlas provides different instance sizes, each with a default storage capacity and RAM size. The instance size you select is used for all the data-bearing servers in your cluster. See [Create a Cluster](https://docs.atlas.mongodb.com/reference/api/clusters-create-one/) `providerSettings.instanceSizeName` for valid values and default resources.
     * 
     */
    @Import(name="providerInstanceSizeName", required=true)
    private Output providerInstanceSizeName;

    /**
     * @return Atlas provides different instance sizes, each with a default storage capacity and RAM size. The instance size you select is used for all the data-bearing servers in your cluster. See [Create a Cluster](https://docs.atlas.mongodb.com/reference/api/clusters-create-one/) `providerSettings.instanceSizeName` for valid values and default resources.
     * 
     */
    public Output providerInstanceSizeName() {
        return this.providerInstanceSizeName;
    }

    /**
     * Cloud service provider on which the servers are provisioned.
     * 
     * The possible values are:
     * 
     * - `AWS` - Amazon AWS
     * - `GCP` - Google Cloud Platform
     * - `AZURE` - Microsoft Azure
     * - `TENANT` - A multi-tenant deployment on one of the supported cloud service providers. Only valid when providerSettings.instanceSizeName is either M2 or M5.
     * 
     */
    @Import(name="providerName", required=true)
    private Output providerName;

    /**
     * @return Cloud service provider on which the servers are provisioned.
     * 
     * The possible values are:
     * 
     * - `AWS` - Amazon AWS
     * - `GCP` - Google Cloud Platform
     * - `AZURE` - Microsoft Azure
     * - `TENANT` - A multi-tenant deployment on one of the supported cloud service providers. Only valid when providerSettings.instanceSizeName is either M2 or M5.
     * 
     */
    public Output providerName() {
        return this.providerName;
    }

    /**
     * Physical location of your MongoDB cluster. The region you choose can affect network latency for clients accessing your databases.  Requires the **Atlas region name**, see the reference list for [AWS](https://docs.atlas.mongodb.com/reference/amazon-aws/), [GCP](https://docs.atlas.mongodb.com/reference/google-gcp/), [Azure](https://docs.atlas.mongodb.com/reference/microsoft-azure/).
     * Do not specify this field when creating a multi-region cluster using the replicationSpec document or a Global Cluster with the replicationSpecs array.
     * 
     */
    @Import(name="providerRegionName")
    private @Nullable Output providerRegionName;

    /**
     * @return Physical location of your MongoDB cluster. The region you choose can affect network latency for clients accessing your databases.  Requires the **Atlas region name**, see the reference list for [AWS](https://docs.atlas.mongodb.com/reference/amazon-aws/), [GCP](https://docs.atlas.mongodb.com/reference/google-gcp/), [Azure](https://docs.atlas.mongodb.com/reference/microsoft-azure/).
     * Do not specify this field when creating a multi-region cluster using the replicationSpec document or a Global Cluster with the replicationSpecs array.
     * 
     */
    public Optional> providerRegionName() {
        return Optional.ofNullable(this.providerRegionName);
    }

    /**
     * The type of the volume. The possible values are: `STANDARD` and `PROVISIONED`.  `PROVISIONED` is ONLY required if setting IOPS higher than the default instance IOPS.
     * > **NOTE:** `STANDARD` is not available for NVME clusters.
     * 
     */
    @Import(name="providerVolumeType")
    private @Nullable Output providerVolumeType;

    /**
     * @return The type of the volume. The possible values are: `STANDARD` and `PROVISIONED`.  `PROVISIONED` is ONLY required if setting IOPS higher than the default instance IOPS.
     * > **NOTE:** `STANDARD` is not available for NVME clusters.
     * 
     */
    public Optional> providerVolumeType() {
        return Optional.ofNullable(this.providerVolumeType);
    }

    /**
     * Number of replica set members. Each member keeps a copy of your databases, providing high availability and data redundancy. The possible values are 3, 5, or 7. The default value is 3.
     * 
     */
    @Import(name="replicationFactor")
    private @Nullable Output replicationFactor;

    /**
     * @return Number of replica set members. Each member keeps a copy of your databases, providing high availability and data redundancy. The possible values are 3, 5, or 7. The default value is 3.
     * 
     */
    public Optional> replicationFactor() {
        return Optional.ofNullable(this.replicationFactor);
    }

    /**
     * Configuration for cluster regions.  See Replication Spec below for more details.
     * 
     */
    @Import(name="replicationSpecs")
    private @Nullable Output> replicationSpecs;

    /**
     * @return Configuration for cluster regions.  See Replication Spec below for more details.
     * 
     */
    public Optional>> replicationSpecs() {
        return Optional.ofNullable(this.replicationSpecs);
    }

    /**
     * Set to true to retain backup snapshots for the deleted cluster. M10 and above only.
     * 
     */
    @Import(name="retainBackupsEnabled")
    private @Nullable Output retainBackupsEnabled;

    /**
     * @return Set to true to retain backup snapshots for the deleted cluster. M10 and above only.
     * 
     */
    public Optional> retainBackupsEnabled() {
        return Optional.ofNullable(this.retainBackupsEnabled);
    }

    /**
     * Set that contains key-value pairs between 1 to 255 characters in length for tagging and categorizing the cluster. See below.
     * 
     */
    @Import(name="tags")
    private @Nullable Output> tags;

    /**
     * @return Set that contains key-value pairs between 1 to 255 characters in length for tagging and categorizing the cluster. See below.
     * 
     */
    public Optional>> tags() {
        return Optional.ofNullable(this.tags);
    }

    /**
     * Flag that indicates whether termination protection is enabled on the cluster. If set to true, MongoDB Cloud won't delete the cluster. If set to false, MongoDB Cloud will delete the cluster.
     * 
     */
    @Import(name="terminationProtectionEnabled")
    private @Nullable Output terminationProtectionEnabled;

    /**
     * @return Flag that indicates whether termination protection is enabled on the cluster. If set to true, MongoDB Cloud won't delete the cluster. If set to false, MongoDB Cloud will delete the cluster.
     * 
     */
    public Optional> terminationProtectionEnabled() {
        return Optional.ofNullable(this.terminationProtectionEnabled);
    }

    /**
     * Release cadence that Atlas uses for this cluster. This parameter defaults to `LTS`. If you set this field to `CONTINUOUS`, you must omit the `mongo_db_major_version` field. Atlas accepts:
     * - `CONTINUOUS`:  Atlas creates your cluster using the most recent MongoDB release. Atlas automatically updates your cluster to the latest major and rapid MongoDB releases as they become available.
     * - `LTS`: Atlas creates your cluster using the latest patch release of the MongoDB version that you specify in the mongoDBMajorVersion field. Atlas automatically updates your cluster to subsequent patch releases of this MongoDB version. Atlas doesn't update your cluster to newer rapid or major MongoDB releases as they become available.
     * 
     */
    @Import(name="versionReleaseSystem")
    private @Nullable Output versionReleaseSystem;

    /**
     * @return Release cadence that Atlas uses for this cluster. This parameter defaults to `LTS`. If you set this field to `CONTINUOUS`, you must omit the `mongo_db_major_version` field. Atlas accepts:
     * - `CONTINUOUS`:  Atlas creates your cluster using the most recent MongoDB release. Atlas automatically updates your cluster to the latest major and rapid MongoDB releases as they become available.
     * - `LTS`: Atlas creates your cluster using the latest patch release of the MongoDB version that you specify in the mongoDBMajorVersion field. Atlas automatically updates your cluster to subsequent patch releases of this MongoDB version. Atlas doesn't update your cluster to newer rapid or major MongoDB releases as they become available.
     * 
     */
    public Optional> versionReleaseSystem() {
        return Optional.ofNullable(this.versionReleaseSystem);
    }

    private ClusterArgs() {}

    private ClusterArgs(ClusterArgs $) {
        this.acceptDataRisksAndForceReplicaSetReconfig = $.acceptDataRisksAndForceReplicaSetReconfig;
        this.advancedConfiguration = $.advancedConfiguration;
        this.autoScalingComputeEnabled = $.autoScalingComputeEnabled;
        this.autoScalingComputeScaleDownEnabled = $.autoScalingComputeScaleDownEnabled;
        this.autoScalingDiskGbEnabled = $.autoScalingDiskGbEnabled;
        this.backingProviderName = $.backingProviderName;
        this.backupEnabled = $.backupEnabled;
        this.biConnectorConfig = $.biConnectorConfig;
        this.cloudBackup = $.cloudBackup;
        this.clusterType = $.clusterType;
        this.diskSizeGb = $.diskSizeGb;
        this.encryptionAtRestProvider = $.encryptionAtRestProvider;
        this.labels = $.labels;
        this.mongoDbMajorVersion = $.mongoDbMajorVersion;
        this.name = $.name;
        this.numShards = $.numShards;
        this.paused = $.paused;
        this.pitEnabled = $.pitEnabled;
        this.projectId = $.projectId;
        this.providerAutoScalingComputeMaxInstanceSize = $.providerAutoScalingComputeMaxInstanceSize;
        this.providerAutoScalingComputeMinInstanceSize = $.providerAutoScalingComputeMinInstanceSize;
        this.providerDiskIops = $.providerDiskIops;
        this.providerDiskTypeName = $.providerDiskTypeName;
        this.providerEncryptEbsVolume = $.providerEncryptEbsVolume;
        this.providerInstanceSizeName = $.providerInstanceSizeName;
        this.providerName = $.providerName;
        this.providerRegionName = $.providerRegionName;
        this.providerVolumeType = $.providerVolumeType;
        this.replicationFactor = $.replicationFactor;
        this.replicationSpecs = $.replicationSpecs;
        this.retainBackupsEnabled = $.retainBackupsEnabled;
        this.tags = $.tags;
        this.terminationProtectionEnabled = $.terminationProtectionEnabled;
        this.versionReleaseSystem = $.versionReleaseSystem;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(ClusterArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private ClusterArgs $;

        public Builder() {
            $ = new ClusterArgs();
        }

        public Builder(ClusterArgs defaults) {
            $ = new ClusterArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param acceptDataRisksAndForceReplicaSetReconfig If reconfiguration is necessary to regain a primary due to a regional outage, submit this field alongside your topology reconfiguration to request a new regional outage resistant topology. Forced reconfigurations during an outage of the majority of electable nodes carry a risk of data loss if replicated writes (even majority committed writes) have not been replicated to the new primary node. MongoDB Atlas docs contain more information. To proceed with an operation which carries that risk, set `accept_data_risks_and_force_replica_set_reconfig` to the current date. Learn more about Reconfiguring a Replica Set during a regional outage [here](https://dochub.mongodb.org/core/regional-outage-reconfigure-replica-set).
         * 
         * @return builder
         * 
         */
        public Builder acceptDataRisksAndForceReplicaSetReconfig(@Nullable Output acceptDataRisksAndForceReplicaSetReconfig) {
            $.acceptDataRisksAndForceReplicaSetReconfig = acceptDataRisksAndForceReplicaSetReconfig;
            return this;
        }

        /**
         * @param acceptDataRisksAndForceReplicaSetReconfig If reconfiguration is necessary to regain a primary due to a regional outage, submit this field alongside your topology reconfiguration to request a new regional outage resistant topology. Forced reconfigurations during an outage of the majority of electable nodes carry a risk of data loss if replicated writes (even majority committed writes) have not been replicated to the new primary node. MongoDB Atlas docs contain more information. To proceed with an operation which carries that risk, set `accept_data_risks_and_force_replica_set_reconfig` to the current date. Learn more about Reconfiguring a Replica Set during a regional outage [here](https://dochub.mongodb.org/core/regional-outage-reconfigure-replica-set).
         * 
         * @return builder
         * 
         */
        public Builder acceptDataRisksAndForceReplicaSetReconfig(String acceptDataRisksAndForceReplicaSetReconfig) {
            return acceptDataRisksAndForceReplicaSetReconfig(Output.of(acceptDataRisksAndForceReplicaSetReconfig));
        }

        public Builder advancedConfiguration(@Nullable Output advancedConfiguration) {
            $.advancedConfiguration = advancedConfiguration;
            return this;
        }

        public Builder advancedConfiguration(ClusterAdvancedConfigurationArgs advancedConfiguration) {
            return advancedConfiguration(Output.of(advancedConfiguration));
        }

        public Builder autoScalingComputeEnabled(@Nullable Output autoScalingComputeEnabled) {
            $.autoScalingComputeEnabled = autoScalingComputeEnabled;
            return this;
        }

        public Builder autoScalingComputeEnabled(Boolean autoScalingComputeEnabled) {
            return autoScalingComputeEnabled(Output.of(autoScalingComputeEnabled));
        }

        /**
         * @param autoScalingComputeScaleDownEnabled Set to `true` to enable the cluster tier to scale down. This option is only available if `autoScaling.compute.enabled` is `true`.
         * - If this option is enabled, you must specify a value for `providerSettings.autoScaling.compute.minInstanceSize`
         * 
         * @return builder
         * 
         */
        public Builder autoScalingComputeScaleDownEnabled(@Nullable Output autoScalingComputeScaleDownEnabled) {
            $.autoScalingComputeScaleDownEnabled = autoScalingComputeScaleDownEnabled;
            return this;
        }

        /**
         * @param autoScalingComputeScaleDownEnabled Set to `true` to enable the cluster tier to scale down. This option is only available if `autoScaling.compute.enabled` is `true`.
         * - If this option is enabled, you must specify a value for `providerSettings.autoScaling.compute.minInstanceSize`
         * 
         * @return builder
         * 
         */
        public Builder autoScalingComputeScaleDownEnabled(Boolean autoScalingComputeScaleDownEnabled) {
            return autoScalingComputeScaleDownEnabled(Output.of(autoScalingComputeScaleDownEnabled));
        }

        public Builder autoScalingDiskGbEnabled(@Nullable Output autoScalingDiskGbEnabled) {
            $.autoScalingDiskGbEnabled = autoScalingDiskGbEnabled;
            return this;
        }

        public Builder autoScalingDiskGbEnabled(Boolean autoScalingDiskGbEnabled) {
            return autoScalingDiskGbEnabled(Output.of(autoScalingDiskGbEnabled));
        }

        /**
         * @param backingProviderName Cloud service provider on which the server for a multi-tenant cluster is provisioned.
         * 
         * This setting is only valid when providerSetting.providerName is TENANT and providerSetting.instanceSizeName is M2 or M5.
         * 
         * The possible values are:
         * 
         * - AWS - Amazon AWS
         * - GCP - Google Cloud Platform
         * - AZURE - Microsoft Azure
         * 
         * @return builder
         * 
         */
        public Builder backingProviderName(@Nullable Output backingProviderName) {
            $.backingProviderName = backingProviderName;
            return this;
        }

        /**
         * @param backingProviderName Cloud service provider on which the server for a multi-tenant cluster is provisioned.
         * 
         * This setting is only valid when providerSetting.providerName is TENANT and providerSetting.instanceSizeName is M2 or M5.
         * 
         * The possible values are:
         * 
         * - AWS - Amazon AWS
         * - GCP - Google Cloud Platform
         * - AZURE - Microsoft Azure
         * 
         * @return builder
         * 
         */
        public Builder backingProviderName(String backingProviderName) {
            return backingProviderName(Output.of(backingProviderName));
        }

        /**
         * @param backupEnabled Legacy Backup - Set to true to enable Atlas legacy backups for the cluster.
         * **Important** - MongoDB deprecated the Legacy Backup feature. Clusters that use Legacy Backup can continue to use it. MongoDB recommends using [Cloud Backups](https://docs.atlas.mongodb.com/backup/cloud-backup/overview/).
         * * New Atlas clusters of any type do not support this parameter. These clusters must use Cloud Backup, `cloud_backup`, to enable Cloud Backup.  If you create a new Atlas cluster and set `backup_enabled` to true, the Provider will respond with an error.  This change doesn’t affect existing clusters that use legacy backups.
         * * Setting this value to false to disable legacy backups for the cluster will let Atlas delete any stored snapshots. In order to preserve the legacy backups snapshots, disable the legacy backups and enable the cloud backups in the single **pulumi up** action.
         * * The default value is false.  M10 and above only.
         * 
         * @return builder
         * 
         */
        public Builder backupEnabled(@Nullable Output backupEnabled) {
            $.backupEnabled = backupEnabled;
            return this;
        }

        /**
         * @param backupEnabled Legacy Backup - Set to true to enable Atlas legacy backups for the cluster.
         * **Important** - MongoDB deprecated the Legacy Backup feature. Clusters that use Legacy Backup can continue to use it. MongoDB recommends using [Cloud Backups](https://docs.atlas.mongodb.com/backup/cloud-backup/overview/).
         * * New Atlas clusters of any type do not support this parameter. These clusters must use Cloud Backup, `cloud_backup`, to enable Cloud Backup.  If you create a new Atlas cluster and set `backup_enabled` to true, the Provider will respond with an error.  This change doesn’t affect existing clusters that use legacy backups.
         * * Setting this value to false to disable legacy backups for the cluster will let Atlas delete any stored snapshots. In order to preserve the legacy backups snapshots, disable the legacy backups and enable the cloud backups in the single **pulumi up** action.
         * * The default value is false.  M10 and above only.
         * 
         * @return builder
         * 
         */
        public Builder backupEnabled(Boolean backupEnabled) {
            return backupEnabled(Output.of(backupEnabled));
        }

        /**
         * @param biConnectorConfig Specifies BI Connector for Atlas configuration on this cluster. BI Connector for Atlas is only available for M10+ clusters. See BI Connector below for more details.
         * 
         * @return builder
         * 
         */
        public Builder biConnectorConfig(@Nullable Output biConnectorConfig) {
            $.biConnectorConfig = biConnectorConfig;
            return this;
        }

        /**
         * @param biConnectorConfig Specifies BI Connector for Atlas configuration on this cluster. BI Connector for Atlas is only available for M10+ clusters. See BI Connector below for more details.
         * 
         * @return builder
         * 
         */
        public Builder biConnectorConfig(ClusterBiConnectorConfigArgs biConnectorConfig) {
            return biConnectorConfig(Output.of(biConnectorConfig));
        }

        public Builder cloudBackup(@Nullable Output cloudBackup) {
            $.cloudBackup = cloudBackup;
            return this;
        }

        public Builder cloudBackup(Boolean cloudBackup) {
            return cloudBackup(Output.of(cloudBackup));
        }

        /**
         * @param clusterType Specifies the type of the cluster that you want to modify. You cannot convert a sharded cluster deployment to a replica set deployment.
         * 
         * > **WHEN SHOULD YOU USE CLUSTERTYPE?**
         * When you set replication_specs, when you are deploying Global Clusters or when you are deploying non-Global replica sets and sharded clusters.
         * 
         * Accepted values include:
         * - `REPLICASET` Replica set
         * - `SHARDED` Sharded cluster
         * - `GEOSHARDED` Global Cluster
         * 
         * @return builder
         * 
         */
        public Builder clusterType(@Nullable Output clusterType) {
            $.clusterType = clusterType;
            return this;
        }

        /**
         * @param clusterType Specifies the type of the cluster that you want to modify. You cannot convert a sharded cluster deployment to a replica set deployment.
         * 
         * > **WHEN SHOULD YOU USE CLUSTERTYPE?**
         * When you set replication_specs, when you are deploying Global Clusters or when you are deploying non-Global replica sets and sharded clusters.
         * 
         * Accepted values include:
         * - `REPLICASET` Replica set
         * - `SHARDED` Sharded cluster
         * - `GEOSHARDED` Global Cluster
         * 
         * @return builder
         * 
         */
        public Builder clusterType(String clusterType) {
            return clusterType(Output.of(clusterType));
        }

        /**
         * @param diskSizeGb Capacity, in gigabytes, of the host’s root volume. Increase this number to add capacity, up to a maximum possible value of 4096 (i.e., 4 TB). This value must be a positive integer.
         * * The minimum disk size for dedicated clusters is 10GB for AWS and GCP. If you specify diskSizeGB with a lower disk size, Atlas defaults to the minimum disk size value.
         * * Note: The maximum value for disk storage cannot exceed 50 times the maximum RAM for the selected cluster. If you require additional storage space beyond this limitation, consider upgrading your cluster to a higher tier.
         * * Cannot be used with clusters with local NVMe SSDs
         * * Cannot be used with Azure clusters
         * 
         * @return builder
         * 
         */
        public Builder diskSizeGb(@Nullable Output diskSizeGb) {
            $.diskSizeGb = diskSizeGb;
            return this;
        }

        /**
         * @param diskSizeGb Capacity, in gigabytes, of the host’s root volume. Increase this number to add capacity, up to a maximum possible value of 4096 (i.e., 4 TB). This value must be a positive integer.
         * * The minimum disk size for dedicated clusters is 10GB for AWS and GCP. If you specify diskSizeGB with a lower disk size, Atlas defaults to the minimum disk size value.
         * * Note: The maximum value for disk storage cannot exceed 50 times the maximum RAM for the selected cluster. If you require additional storage space beyond this limitation, consider upgrading your cluster to a higher tier.
         * * Cannot be used with clusters with local NVMe SSDs
         * * Cannot be used with Azure clusters
         * 
         * @return builder
         * 
         */
        public Builder diskSizeGb(Double diskSizeGb) {
            return diskSizeGb(Output.of(diskSizeGb));
        }

        /**
         * @param encryptionAtRestProvider Possible values are AWS, GCP, AZURE or NONE.  Only needed if you desire to manage the keys, see [Encryption at Rest using Customer Key Management](https://docs.atlas.mongodb.com/security-aws-kms/) for complete documentation.  You must configure encryption at rest for the Atlas project before enabling it on any cluster in the project. For complete documentation on configuring Encryption at Rest, see Encryption at Rest using Customer Key Management. Requires M10 or greater. and for legacy backups, backup_enabled, to be false or omitted. **Note: Atlas encrypts all cluster storage and snapshot volumes, securing all cluster data on disk: a concept known as encryption at rest, by default**.
         * 
         * @return builder
         * 
         */
        public Builder encryptionAtRestProvider(@Nullable Output encryptionAtRestProvider) {
            $.encryptionAtRestProvider = encryptionAtRestProvider;
            return this;
        }

        /**
         * @param encryptionAtRestProvider Possible values are AWS, GCP, AZURE or NONE.  Only needed if you desire to manage the keys, see [Encryption at Rest using Customer Key Management](https://docs.atlas.mongodb.com/security-aws-kms/) for complete documentation.  You must configure encryption at rest for the Atlas project before enabling it on any cluster in the project. For complete documentation on configuring Encryption at Rest, see Encryption at Rest using Customer Key Management. Requires M10 or greater. and for legacy backups, backup_enabled, to be false or omitted. **Note: Atlas encrypts all cluster storage and snapshot volumes, securing all cluster data on disk: a concept known as encryption at rest, by default**.
         * 
         * @return builder
         * 
         */
        public Builder encryptionAtRestProvider(String encryptionAtRestProvider) {
            return encryptionAtRestProvider(Output.of(encryptionAtRestProvider));
        }

        /**
         * @param labels Set that contains key-value pairs between 1 to 255 characters in length for tagging and categorizing the cluster. See below. **DEPRECATED** Use `tags` instead.
         * 
         * @return builder
         * 
         * @deprecated
         * This parameter is deprecated and will be removed in the future. Please transition to tags
         * 
         */
        @Deprecated /* This parameter is deprecated and will be removed in the future. Please transition to tags */
        public Builder labels(@Nullable Output> labels) {
            $.labels = labels;
            return this;
        }

        /**
         * @param labels Set that contains key-value pairs between 1 to 255 characters in length for tagging and categorizing the cluster. See below. **DEPRECATED** Use `tags` instead.
         * 
         * @return builder
         * 
         * @deprecated
         * This parameter is deprecated and will be removed in the future. Please transition to tags
         * 
         */
        @Deprecated /* This parameter is deprecated and will be removed in the future. Please transition to tags */
        public Builder labels(List labels) {
            return labels(Output.of(labels));
        }

        /**
         * @param labels Set that contains key-value pairs between 1 to 255 characters in length for tagging and categorizing the cluster. See below. **DEPRECATED** Use `tags` instead.
         * 
         * @return builder
         * 
         * @deprecated
         * This parameter is deprecated and will be removed in the future. Please transition to tags
         * 
         */
        @Deprecated /* This parameter is deprecated and will be removed in the future. Please transition to tags */
        public Builder labels(ClusterLabelArgs... labels) {
            return labels(List.of(labels));
        }

        /**
         * @param mongoDbMajorVersion Version of the cluster to deploy. Atlas supports the following MongoDB versions for M10+ clusters: `4.4`, `5.0`, `6.0` or `7.0`. If omitted, Atlas deploys a cluster that runs MongoDB 7.0. If `provider_instance_size_name`: `M0`, `M2` or `M5`, Atlas deploys MongoDB 5.0. Atlas always deploys the cluster with the latest stable release of the specified version. See [Release Notes](https://www.mongodb.com/docs/upcoming/release-notes/) for latest Current Stable Release.
         * 
         * @return builder
         * 
         */
        public Builder mongoDbMajorVersion(@Nullable Output mongoDbMajorVersion) {
            $.mongoDbMajorVersion = mongoDbMajorVersion;
            return this;
        }

        /**
         * @param mongoDbMajorVersion Version of the cluster to deploy. Atlas supports the following MongoDB versions for M10+ clusters: `4.4`, `5.0`, `6.0` or `7.0`. If omitted, Atlas deploys a cluster that runs MongoDB 7.0. If `provider_instance_size_name`: `M0`, `M2` or `M5`, Atlas deploys MongoDB 5.0. Atlas always deploys the cluster with the latest stable release of the specified version. See [Release Notes](https://www.mongodb.com/docs/upcoming/release-notes/) for latest Current Stable Release.
         * 
         * @return builder
         * 
         */
        public Builder mongoDbMajorVersion(String mongoDbMajorVersion) {
            return mongoDbMajorVersion(Output.of(mongoDbMajorVersion));
        }

        /**
         * @param name Name of the cluster as it appears in Atlas. Once the cluster is created, its name cannot be changed. **WARNING** Changing the name will result in destruction of the existing cluster and the creation of a new cluster.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output name) {
            $.name = name;
            return this;
        }

        /**
         * @param name Name of the cluster as it appears in Atlas. Once the cluster is created, its name cannot be changed. **WARNING** Changing the name will result in destruction of the existing cluster and the creation of a new cluster.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param numShards Selects whether the cluster is a replica set or a sharded cluster. If you use the replicationSpecs parameter, you must set num_shards.
         * 
         * @return builder
         * 
         */
        public Builder numShards(@Nullable Output numShards) {
            $.numShards = numShards;
            return this;
        }

        /**
         * @param numShards Selects whether the cluster is a replica set or a sharded cluster. If you use the replicationSpecs parameter, you must set num_shards.
         * 
         * @return builder
         * 
         */
        public Builder numShards(Integer numShards) {
            return numShards(Output.of(numShards));
        }

        public Builder paused(@Nullable Output paused) {
            $.paused = paused;
            return this;
        }

        public Builder paused(Boolean paused) {
            return paused(Output.of(paused));
        }

        /**
         * @param pitEnabled Flag that indicates if the cluster uses Continuous Cloud Backup. If set to true, cloud_backup must also be set to true.
         * 
         * @return builder
         * 
         */
        public Builder pitEnabled(@Nullable Output pitEnabled) {
            $.pitEnabled = pitEnabled;
            return this;
        }

        /**
         * @param pitEnabled Flag that indicates if the cluster uses Continuous Cloud Backup. If set to true, cloud_backup must also be set to true.
         * 
         * @return builder
         * 
         */
        public Builder pitEnabled(Boolean pitEnabled) {
            return pitEnabled(Output.of(pitEnabled));
        }

        /**
         * @param projectId The unique ID for the project to create the database user.
         * 
         * @return builder
         * 
         */
        public Builder projectId(Output projectId) {
            $.projectId = projectId;
            return this;
        }

        /**
         * @param projectId The unique ID for the project to create the database user.
         * 
         * @return builder
         * 
         */
        public Builder projectId(String projectId) {
            return projectId(Output.of(projectId));
        }

        /**
         * @param providerAutoScalingComputeMaxInstanceSize Maximum instance size to which your cluster can automatically scale (e.g., M40). Required if `autoScaling.compute.enabled` is `true`.
         * 
         * @return builder
         * 
         */
        public Builder providerAutoScalingComputeMaxInstanceSize(@Nullable Output providerAutoScalingComputeMaxInstanceSize) {
            $.providerAutoScalingComputeMaxInstanceSize = providerAutoScalingComputeMaxInstanceSize;
            return this;
        }

        /**
         * @param providerAutoScalingComputeMaxInstanceSize Maximum instance size to which your cluster can automatically scale (e.g., M40). Required if `autoScaling.compute.enabled` is `true`.
         * 
         * @return builder
         * 
         */
        public Builder providerAutoScalingComputeMaxInstanceSize(String providerAutoScalingComputeMaxInstanceSize) {
            return providerAutoScalingComputeMaxInstanceSize(Output.of(providerAutoScalingComputeMaxInstanceSize));
        }

        /**
         * @param providerAutoScalingComputeMinInstanceSize Minimum instance size to which your cluster can automatically scale (e.g., M10). Required if `autoScaling.compute.scaleDownEnabled` is `true`.
         * 
         * @return builder
         * 
         */
        public Builder providerAutoScalingComputeMinInstanceSize(@Nullable Output providerAutoScalingComputeMinInstanceSize) {
            $.providerAutoScalingComputeMinInstanceSize = providerAutoScalingComputeMinInstanceSize;
            return this;
        }

        /**
         * @param providerAutoScalingComputeMinInstanceSize Minimum instance size to which your cluster can automatically scale (e.g., M10). Required if `autoScaling.compute.scaleDownEnabled` is `true`.
         * 
         * @return builder
         * 
         */
        public Builder providerAutoScalingComputeMinInstanceSize(String providerAutoScalingComputeMinInstanceSize) {
            return providerAutoScalingComputeMinInstanceSize(Output.of(providerAutoScalingComputeMinInstanceSize));
        }

        /**
         * @param providerDiskIops The maximum input/output operations per second (IOPS) the system can perform. The possible values depend on the selected `provider_instance_size_name` and `disk_size_gb`.  This setting requires that `provider_instance_size_name` to be M30 or greater and cannot be used with clusters with local NVMe SSDs.  The default value for `provider_disk_iops` is the same as the cluster tier's Standard IOPS value, as viewable in the Atlas console.  It is used in cases where a higher number of IOPS is needed and possible.  If a value is submitted that is lower or equal to the default IOPS value for the cluster tier Atlas ignores the requested value and uses the default.  More details available under the providerSettings.diskIOPS parameter: [MongoDB API Clusters](https://docs.atlas.mongodb.com/reference/api/clusters-create-one/)
         * * You do not need to configure IOPS for a STANDARD disk configuration but only for a PROVISIONED configuration.
         * 
         * @return builder
         * 
         */
        public Builder providerDiskIops(@Nullable Output providerDiskIops) {
            $.providerDiskIops = providerDiskIops;
            return this;
        }

        /**
         * @param providerDiskIops The maximum input/output operations per second (IOPS) the system can perform. The possible values depend on the selected `provider_instance_size_name` and `disk_size_gb`.  This setting requires that `provider_instance_size_name` to be M30 or greater and cannot be used with clusters with local NVMe SSDs.  The default value for `provider_disk_iops` is the same as the cluster tier's Standard IOPS value, as viewable in the Atlas console.  It is used in cases where a higher number of IOPS is needed and possible.  If a value is submitted that is lower or equal to the default IOPS value for the cluster tier Atlas ignores the requested value and uses the default.  More details available under the providerSettings.diskIOPS parameter: [MongoDB API Clusters](https://docs.atlas.mongodb.com/reference/api/clusters-create-one/)
         * * You do not need to configure IOPS for a STANDARD disk configuration but only for a PROVISIONED configuration.
         * 
         * @return builder
         * 
         */
        public Builder providerDiskIops(Integer providerDiskIops) {
            return providerDiskIops(Output.of(providerDiskIops));
        }

        /**
         * @param providerDiskTypeName Azure disk type of the server’s root volume. If omitted, Atlas uses the default disk type for the selected providerSettings.instanceSizeName.  Example disk types and associated storage sizes: P4 - 32GB, P6 - 64GB, P10 - 128GB, P15 - 256GB, P20 - 512GB, P30 - 1024GB, P40 - 2048GB, P50 - 4095GB.  More information and the most update to date disk types/storage sizes can be located at https://docs.atlas.mongodb.com/reference/api/clusters-create-one/.
         * 
         * @return builder
         * 
         */
        public Builder providerDiskTypeName(@Nullable Output providerDiskTypeName) {
            $.providerDiskTypeName = providerDiskTypeName;
            return this;
        }

        /**
         * @param providerDiskTypeName Azure disk type of the server’s root volume. If omitted, Atlas uses the default disk type for the selected providerSettings.instanceSizeName.  Example disk types and associated storage sizes: P4 - 32GB, P6 - 64GB, P10 - 128GB, P15 - 256GB, P20 - 512GB, P30 - 1024GB, P40 - 2048GB, P50 - 4095GB.  More information and the most update to date disk types/storage sizes can be located at https://docs.atlas.mongodb.com/reference/api/clusters-create-one/.
         * 
         * @return builder
         * 
         */
        public Builder providerDiskTypeName(String providerDiskTypeName) {
            return providerDiskTypeName(Output.of(providerDiskTypeName));
        }

        /**
         * @param providerEncryptEbsVolume **(Deprecated) The Flag is always true.** Flag that indicates whether the Amazon EBS encryption feature encrypts the host's root volume for both data at rest within the volume and for data moving between the volume and the cluster. Note: This setting is always enabled for clusters with local NVMe SSDs. **Atlas encrypts all cluster storage and snapshot volumes, securing all cluster data on disk: a concept known as encryption at rest, by default.**.
         * 
         * @return builder
         * 
         * @deprecated
         * All EBS volumes are encrypted by default, the option to disable encryption has been removed
         * 
         */
        @Deprecated /* All EBS volumes are encrypted by default, the option to disable encryption has been removed */
        public Builder providerEncryptEbsVolume(@Nullable Output providerEncryptEbsVolume) {
            $.providerEncryptEbsVolume = providerEncryptEbsVolume;
            return this;
        }

        /**
         * @param providerEncryptEbsVolume **(Deprecated) The Flag is always true.** Flag that indicates whether the Amazon EBS encryption feature encrypts the host's root volume for both data at rest within the volume and for data moving between the volume and the cluster. Note: This setting is always enabled for clusters with local NVMe SSDs. **Atlas encrypts all cluster storage and snapshot volumes, securing all cluster data on disk: a concept known as encryption at rest, by default.**.
         * 
         * @return builder
         * 
         * @deprecated
         * All EBS volumes are encrypted by default, the option to disable encryption has been removed
         * 
         */
        @Deprecated /* All EBS volumes are encrypted by default, the option to disable encryption has been removed */
        public Builder providerEncryptEbsVolume(Boolean providerEncryptEbsVolume) {
            return providerEncryptEbsVolume(Output.of(providerEncryptEbsVolume));
        }

        /**
         * @param providerInstanceSizeName Atlas provides different instance sizes, each with a default storage capacity and RAM size. The instance size you select is used for all the data-bearing servers in your cluster. See [Create a Cluster](https://docs.atlas.mongodb.com/reference/api/clusters-create-one/) `providerSettings.instanceSizeName` for valid values and default resources.
         * 
         * @return builder
         * 
         */
        public Builder providerInstanceSizeName(Output providerInstanceSizeName) {
            $.providerInstanceSizeName = providerInstanceSizeName;
            return this;
        }

        /**
         * @param providerInstanceSizeName Atlas provides different instance sizes, each with a default storage capacity and RAM size. The instance size you select is used for all the data-bearing servers in your cluster. See [Create a Cluster](https://docs.atlas.mongodb.com/reference/api/clusters-create-one/) `providerSettings.instanceSizeName` for valid values and default resources.
         * 
         * @return builder
         * 
         */
        public Builder providerInstanceSizeName(String providerInstanceSizeName) {
            return providerInstanceSizeName(Output.of(providerInstanceSizeName));
        }

        /**
         * @param providerName Cloud service provider on which the servers are provisioned.
         * 
         * The possible values are:
         * 
         * - `AWS` - Amazon AWS
         * - `GCP` - Google Cloud Platform
         * - `AZURE` - Microsoft Azure
         * - `TENANT` - A multi-tenant deployment on one of the supported cloud service providers. Only valid when providerSettings.instanceSizeName is either M2 or M5.
         * 
         * @return builder
         * 
         */
        public Builder providerName(Output providerName) {
            $.providerName = providerName;
            return this;
        }

        /**
         * @param providerName Cloud service provider on which the servers are provisioned.
         * 
         * The possible values are:
         * 
         * - `AWS` - Amazon AWS
         * - `GCP` - Google Cloud Platform
         * - `AZURE` - Microsoft Azure
         * - `TENANT` - A multi-tenant deployment on one of the supported cloud service providers. Only valid when providerSettings.instanceSizeName is either M2 or M5.
         * 
         * @return builder
         * 
         */
        public Builder providerName(String providerName) {
            return providerName(Output.of(providerName));
        }

        /**
         * @param providerRegionName Physical location of your MongoDB cluster. The region you choose can affect network latency for clients accessing your databases.  Requires the **Atlas region name**, see the reference list for [AWS](https://docs.atlas.mongodb.com/reference/amazon-aws/), [GCP](https://docs.atlas.mongodb.com/reference/google-gcp/), [Azure](https://docs.atlas.mongodb.com/reference/microsoft-azure/).
         * Do not specify this field when creating a multi-region cluster using the replicationSpec document or a Global Cluster with the replicationSpecs array.
         * 
         * @return builder
         * 
         */
        public Builder providerRegionName(@Nullable Output providerRegionName) {
            $.providerRegionName = providerRegionName;
            return this;
        }

        /**
         * @param providerRegionName Physical location of your MongoDB cluster. The region you choose can affect network latency for clients accessing your databases.  Requires the **Atlas region name**, see the reference list for [AWS](https://docs.atlas.mongodb.com/reference/amazon-aws/), [GCP](https://docs.atlas.mongodb.com/reference/google-gcp/), [Azure](https://docs.atlas.mongodb.com/reference/microsoft-azure/).
         * Do not specify this field when creating a multi-region cluster using the replicationSpec document or a Global Cluster with the replicationSpecs array.
         * 
         * @return builder
         * 
         */
        public Builder providerRegionName(String providerRegionName) {
            return providerRegionName(Output.of(providerRegionName));
        }

        /**
         * @param providerVolumeType The type of the volume. The possible values are: `STANDARD` and `PROVISIONED`.  `PROVISIONED` is ONLY required if setting IOPS higher than the default instance IOPS.
         * > **NOTE:** `STANDARD` is not available for NVME clusters.
         * 
         * @return builder
         * 
         */
        public Builder providerVolumeType(@Nullable Output providerVolumeType) {
            $.providerVolumeType = providerVolumeType;
            return this;
        }

        /**
         * @param providerVolumeType The type of the volume. The possible values are: `STANDARD` and `PROVISIONED`.  `PROVISIONED` is ONLY required if setting IOPS higher than the default instance IOPS.
         * > **NOTE:** `STANDARD` is not available for NVME clusters.
         * 
         * @return builder
         * 
         */
        public Builder providerVolumeType(String providerVolumeType) {
            return providerVolumeType(Output.of(providerVolumeType));
        }

        /**
         * @param replicationFactor Number of replica set members. Each member keeps a copy of your databases, providing high availability and data redundancy. The possible values are 3, 5, or 7. The default value is 3.
         * 
         * @return builder
         * 
         */
        public Builder replicationFactor(@Nullable Output replicationFactor) {
            $.replicationFactor = replicationFactor;
            return this;
        }

        /**
         * @param replicationFactor Number of replica set members. Each member keeps a copy of your databases, providing high availability and data redundancy. The possible values are 3, 5, or 7. The default value is 3.
         * 
         * @return builder
         * 
         */
        public Builder replicationFactor(Integer replicationFactor) {
            return replicationFactor(Output.of(replicationFactor));
        }

        /**
         * @param replicationSpecs Configuration for cluster regions.  See Replication Spec below for more details.
         * 
         * @return builder
         * 
         */
        public Builder replicationSpecs(@Nullable Output> replicationSpecs) {
            $.replicationSpecs = replicationSpecs;
            return this;
        }

        /**
         * @param replicationSpecs Configuration for cluster regions.  See Replication Spec below for more details.
         * 
         * @return builder
         * 
         */
        public Builder replicationSpecs(List replicationSpecs) {
            return replicationSpecs(Output.of(replicationSpecs));
        }

        /**
         * @param replicationSpecs Configuration for cluster regions.  See Replication Spec below for more details.
         * 
         * @return builder
         * 
         */
        public Builder replicationSpecs(ClusterReplicationSpecArgs... replicationSpecs) {
            return replicationSpecs(List.of(replicationSpecs));
        }

        /**
         * @param retainBackupsEnabled Set to true to retain backup snapshots for the deleted cluster. M10 and above only.
         * 
         * @return builder
         * 
         */
        public Builder retainBackupsEnabled(@Nullable Output retainBackupsEnabled) {
            $.retainBackupsEnabled = retainBackupsEnabled;
            return this;
        }

        /**
         * @param retainBackupsEnabled Set to true to retain backup snapshots for the deleted cluster. M10 and above only.
         * 
         * @return builder
         * 
         */
        public Builder retainBackupsEnabled(Boolean retainBackupsEnabled) {
            return retainBackupsEnabled(Output.of(retainBackupsEnabled));
        }

        /**
         * @param tags Set that contains key-value pairs between 1 to 255 characters in length for tagging and categorizing the cluster. See below.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags Set that contains key-value pairs between 1 to 255 characters in length for tagging and categorizing the cluster. See below.
         * 
         * @return builder
         * 
         */
        public Builder tags(List tags) {
            return tags(Output.of(tags));
        }

        /**
         * @param tags Set that contains key-value pairs between 1 to 255 characters in length for tagging and categorizing the cluster. See below.
         * 
         * @return builder
         * 
         */
        public Builder tags(ClusterTagArgs... tags) {
            return tags(List.of(tags));
        }

        /**
         * @param terminationProtectionEnabled Flag that indicates whether termination protection is enabled on the cluster. If set to true, MongoDB Cloud won't delete the cluster. If set to false, MongoDB Cloud will delete the cluster.
         * 
         * @return builder
         * 
         */
        public Builder terminationProtectionEnabled(@Nullable Output terminationProtectionEnabled) {
            $.terminationProtectionEnabled = terminationProtectionEnabled;
            return this;
        }

        /**
         * @param terminationProtectionEnabled Flag that indicates whether termination protection is enabled on the cluster. If set to true, MongoDB Cloud won't delete the cluster. If set to false, MongoDB Cloud will delete the cluster.
         * 
         * @return builder
         * 
         */
        public Builder terminationProtectionEnabled(Boolean terminationProtectionEnabled) {
            return terminationProtectionEnabled(Output.of(terminationProtectionEnabled));
        }

        /**
         * @param versionReleaseSystem Release cadence that Atlas uses for this cluster. This parameter defaults to `LTS`. If you set this field to `CONTINUOUS`, you must omit the `mongo_db_major_version` field. Atlas accepts:
         * - `CONTINUOUS`:  Atlas creates your cluster using the most recent MongoDB release. Atlas automatically updates your cluster to the latest major and rapid MongoDB releases as they become available.
         * - `LTS`: Atlas creates your cluster using the latest patch release of the MongoDB version that you specify in the mongoDBMajorVersion field. Atlas automatically updates your cluster to subsequent patch releases of this MongoDB version. Atlas doesn't update your cluster to newer rapid or major MongoDB releases as they become available.
         * 
         * @return builder
         * 
         */
        public Builder versionReleaseSystem(@Nullable Output versionReleaseSystem) {
            $.versionReleaseSystem = versionReleaseSystem;
            return this;
        }

        /**
         * @param versionReleaseSystem Release cadence that Atlas uses for this cluster. This parameter defaults to `LTS`. If you set this field to `CONTINUOUS`, you must omit the `mongo_db_major_version` field. Atlas accepts:
         * - `CONTINUOUS`:  Atlas creates your cluster using the most recent MongoDB release. Atlas automatically updates your cluster to the latest major and rapid MongoDB releases as they become available.
         * - `LTS`: Atlas creates your cluster using the latest patch release of the MongoDB version that you specify in the mongoDBMajorVersion field. Atlas automatically updates your cluster to subsequent patch releases of this MongoDB version. Atlas doesn't update your cluster to newer rapid or major MongoDB releases as they become available.
         * 
         * @return builder
         * 
         */
        public Builder versionReleaseSystem(String versionReleaseSystem) {
            return versionReleaseSystem(Output.of(versionReleaseSystem));
        }

        public ClusterArgs build() {
            if ($.projectId == null) {
                throw new MissingRequiredPropertyException("ClusterArgs", "projectId");
            }
            if ($.providerInstanceSizeName == null) {
                throw new MissingRequiredPropertyException("ClusterArgs", "providerInstanceSizeName");
            }
            if ($.providerName == null) {
                throw new MissingRequiredPropertyException("ClusterArgs", "providerName");
            }
            return $;
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy