diff --git a/docs/data-sources/rediscloud_active_active_subscription_database.md b/docs/data-sources/rediscloud_active_active_subscription_database.md index b2905a62..8f44b35b 100644 --- a/docs/data-sources/rediscloud_active_active_subscription_database.md +++ b/docs/data-sources/rediscloud_active_active_subscription_database.md @@ -43,6 +43,7 @@ data "rediscloud_active_active_subscription_database" "example" { `id` is set to the ID of the found subscription and database in the following format: `{subscription_id}/{db_id}` * `memory_limit_in_gb` - The maximum memory usage for the database. +* `dataset_size_in_gb` - Maximum amount of data in the dataset for this specific database in GB. * `support_oss_cluster_api` - Supports the Redis open-source (OSS) Cluster API. * `external_endpoint_for_oss_cluster_api` - Use the external endpoint for open-source (OSS) Cluster API. * `enable_tls` - Enable TLS for database. diff --git a/docs/data-sources/rediscloud_database.md b/docs/data-sources/rediscloud_database.md index 54220ff2..1edc3f6e 100644 --- a/docs/data-sources/rediscloud_database.md +++ b/docs/data-sources/rediscloud_database.md @@ -43,6 +43,7 @@ data "rediscloud_database" "example" { * `name` - The name of the database * `protocol` - The protocol of the database. * `memory_limit_in_gb` - The maximum memory usage for the database. +* `dataset_size_in_gb` - Maximum amount of data in the dataset for this specific database in GB. * `support_oss_cluster_api` - Supports the Redis open-source (OSS) Cluster API. * `resp_version` - Either `resp2` or `resp3`. Database's RESP version. * `replica_of` - The set of Redis database URIs, in the format `redis://user:password@host:port`, that this diff --git a/docs/resources/rediscloud_active_active_subscription_database.md b/docs/resources/rediscloud_active_active_subscription_database.md index 3ba54869..05f189e0 100644 --- a/docs/resources/rediscloud_active_active_subscription_database.md +++ b/docs/resources/rediscloud_active_active_subscription_database.md @@ -90,7 +90,8 @@ output "us-east-2-private-endpoints" { The following arguments are supported: * `subscription_id`: (Required) The ID of the Active-Active subscription to create the database in. **Modifying this attribute will force creation of a new resource.** * `name` - (Required) A meaningful name to identify the database. **Modifying this attribute will force creation of a new resource.** -* `memory_limit_in_gb` - (Required) Maximum memory usage for this specific database, including replication and other overhead +* `memory_limit_in_gb` - (Optional - **Required if `dataset_size_in_gb` is unset**) Maximum memory usage for this specific database, including replication and other overhead **Deprecated in favor of `dataset_size_in_gb` - not possible to import databases with this attribute set** +* `dataset_size_in_gb` - (Optional - **Required if `memory_limit_in_gb` is unset**) The maximum amount of data in the dataset for this specific database is in GB * `support_oss_cluster_api` - (Optional) Support Redis open-source (OSS) Cluster API. Default: ‘false’ * `external_endpoint_for_oss_cluster_api` - (Optional) Should use the external endpoint for open-source (OSS) Cluster API. Can only be enabled if OSS Cluster API support is enabled. Default: 'false' @@ -178,3 +179,5 @@ $ terraform import rediscloud_active_active_subscription_database.database-resou Note: Due to constraints in the Redis Cloud API, the import process will not import global attributes or override region attributes. If you wish to use these attributes in your Terraform configuration, you will need to manually add them to your Terraform configuration and run `terraform apply` to update the database. +Additionally, the `memory_limit_in_gb` cannot be set during imports as it is deprecated. If you need to set the `memory_limit_in_gb` attribute, you will need to create a new database resource. It is recommended to use the `dataset_size_in_gb` attribute instead. + diff --git a/docs/resources/rediscloud_subscription.md b/docs/resources/rediscloud_subscription.md index c5961148..8efc4b01 100644 --- a/docs/resources/rediscloud_subscription.md +++ b/docs/resources/rediscloud_subscription.md @@ -48,7 +48,7 @@ resource "rediscloud_subscription" "subscription-resource" { // This block needs to be defined for provisioning a new subscription. // This allows creation of a well-optimized hardware specification for databases in the cluster creation_plan { - memory_limit_in_gb = 15 + dataset_size_in_gb = 15 quantity = 1 replication = true throughput_measurement_by = "operations-per-second" @@ -98,7 +98,8 @@ The `cloud_provider` block supports: The `creation_plan` block supports: -* `memory_limit_in_gb` - (Required) Maximum memory usage that will be used for your largest planned database. +* `memory_limit_in_gb` - (Required) Maximum memory usage that will be used for your largest planned database. You can not set both dataset_size_in_gb and memory_limit_in_gb. **Deprecated: Use `dataset_size_in_gb` instead** +* `dataset_size_in_gb` - (Required) The maximum amount of data in the dataset for this specific database is in GB. You can not set both dataset_size_in_gb and memory_limit_in_gb. * `modules` - (Optional) a list of modules that will be used by the databases in this subscription. Not currently compatible with ‘ram-and-flash’ memory storage. Example: `modules = ["RedisJSON", "RediSearch", "RedisTimeSeries", "RedisBloom"]` * `support_oss_cluster_api` - (Optional) Support Redis open-source (OSS) Cluster API. Default: ‘false’ diff --git a/docs/resources/rediscloud_subscription_database.md b/docs/resources/rediscloud_subscription_database.md index 778e809a..9b83162a 100644 --- a/docs/resources/rediscloud_subscription_database.md +++ b/docs/resources/rediscloud_subscription_database.md @@ -38,7 +38,7 @@ resource "rediscloud_subscription" "subscription-resource" { // This block needs to be defined for provisioning a new subscription. // This allows creation of a well-optimized hardware specification for databases in the cluster creation_plan { - memory_limit_in_gb = 15 + dataset_size_in_gb = 15 quantity = 1 replication=true throughput_measurement_by = "operations-per-second" @@ -51,7 +51,7 @@ resource "rediscloud_subscription" "subscription-resource" { resource "rediscloud_subscription_database" "database-resource" { subscription_id = rediscloud_subscription.subscription-resource.id name = "database-name" - memory_limit_in_gb = 15 + dataset_size_in_gb = 15 data_persistence = "aof-every-write" throughput_measurement_by = "operations-per-second" throughput_measurement_value = 20000 @@ -82,7 +82,8 @@ The following arguments are supported: * `name` - (Required) A meaningful name to identify the database * `throughput_measurement_by` - (Required) Throughput measurement method that will be used by your databases. Either `number-of-shards` or `operations-per-second`. **`number-of-shards` is deprecated and only supported for legacy deployments.** * `throughput_measurement_value` - (Required) Throughput value (as applies to selected measurement method) -* `memory_limit_in_gb` - (Required) Maximum memory usage for this specific database +* `memory_limit_in_gb` - (Optional - **Required if `dataset_size_in_gb` is unset**) Maximum memory usage for this specific database, including replication and other overhead **Deprecated in favor of `dataset_size_in_gb` - not possible to import databases with this attribute set** +* `dataset_size_in_gb` - (Optional - **Required if `memory_limit_in_gb` is unset**) The maximum amount of data in the dataset for this specific database is in GB * `protocol` - (Optional) The protocol that will be used to access the database, (either ‘redis’ or ‘memcached’) Default: ‘redis’. **Modifying this attribute will force creation of a new resource.** * `support_oss_cluster_api` - (Optional) Support Redis open-source (OSS) Cluster API. Default: ‘false’ * `resp_version` - (Optional) Either `resp2` or `resp3`. Database's RESP version. Must be compatible with the Redis version. @@ -188,3 +189,4 @@ The `response` block `latest_import_status` contains: $ terraform import rediscloud_subscription_database.database-resource 123456/12345678 ``` +Note: Due to constraints in the Redis Cloud API, the `memory_limit_in_gb` cannot be set during imports as it is deprecated. If you need to set the `memory_limit_in_gb` attribute, you will need to create a new database resource. It is recommended to use the `dataset_size_in_gb` attribute instead. \ No newline at end of file diff --git a/provider/datasource_rediscloud_active_active_database.go b/provider/datasource_rediscloud_active_active_database.go index 1b08b5a8..eea5e95e 100644 --- a/provider/datasource_rediscloud_active_active_database.go +++ b/provider/datasource_rediscloud_active_active_database.go @@ -3,6 +3,7 @@ package provider import ( "context" "fmt" + "github.com/RedisLabs/rediscloud-go-api/redis" "github.com/RedisLabs/rediscloud-go-api/service/databases" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" @@ -33,7 +34,12 @@ func dataSourceRedisCloudActiveActiveDatabase() *schema.Resource { Optional: true, }, "memory_limit_in_gb": { - Description: "Maximum memory usage for this specific database", + Description: "(Deprecated) Maximum memory usage for this specific database", + Type: schema.TypeFloat, + Computed: true, + }, + "dataset_size_in_gb": { + Description: "Maximum amount of data in the dataset for this specific database in GB", Type: schema.TypeFloat, Computed: true, }, @@ -284,6 +290,9 @@ func dataSourceRedisCloudActiveActiveDatabaseRead(ctx context.Context, d *schema if err := d.Set("memory_limit_in_gb", redis.Float64(*db.CrdbDatabases[0].MemoryLimitInGB)); err != nil { return diag.FromErr(err) } + if err := d.Set("dataset_size_in_gb", redis.Float64(*db.CrdbDatabases[0].DatasetSizeInGB)); err != nil { + return diag.FromErr(err) + } if err := d.Set("support_oss_cluster_api", redis.BoolValue(db.SupportOSSClusterAPI)); err != nil { return diag.FromErr(err) } diff --git a/provider/datasource_rediscloud_pro_database.go b/provider/datasource_rediscloud_pro_database.go index 5b0a56ac..01b20e1b 100644 --- a/provider/datasource_rediscloud_pro_database.go +++ b/provider/datasource_rediscloud_pro_database.go @@ -3,13 +3,14 @@ package provider import ( "context" "fmt" + "regexp" + "strconv" + "github.com/RedisLabs/rediscloud-go-api/redis" "github.com/RedisLabs/rediscloud-go-api/service/databases" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "regexp" - "strconv" ) func dataSourceRedisCloudProDatabase() *schema.Resource { @@ -53,6 +54,11 @@ func dataSourceRedisCloudProDatabase() *schema.Resource { Type: schema.TypeFloat, Computed: true, }, + "dataset_size_in_gb": { + Description: "Maximum amount of data in the dataset for this specific database in GB", + Type: schema.TypeFloat, + Computed: true, + }, "support_oss_cluster_api": { Description: "Supports the Redis open-source (OSS) Cluster API", Type: schema.TypeBool, @@ -374,6 +380,9 @@ func dataSourceRedisCloudProDatabaseRead(ctx context.Context, d *schema.Resource if err := d.Set("memory_limit_in_gb", redis.Float64Value(db.MemoryLimitInGB)); err != nil { return diag.FromErr(err) } + if err := d.Set("dataset_size_in_gb", redis.Float64Value(db.DatasetSizeInGB)); err != nil { + return diag.FromErr(err) + } if err := d.Set("support_oss_cluster_api", redis.BoolValue(db.SupportOSSClusterAPI)); err != nil { return diag.FromErr(err) } diff --git a/provider/rediscloud_active_active_database_test.go b/provider/rediscloud_active_active_database_test.go index 9b675992..8d73b733 100644 --- a/provider/rediscloud_active_active_database_test.go +++ b/provider/rediscloud_active_active_database_test.go @@ -37,7 +37,7 @@ func TestAccResourceRedisCloudActiveActiveDatabase_CRUDI(t *testing.T) { Check: resource.ComposeAggregateTestCheckFunc( // Test resource resource.TestCheckResourceAttr(resourceName, "name", name), - resource.TestCheckResourceAttr(resourceName, "memory_limit_in_gb", "3"), + resource.TestCheckResourceAttr(resourceName, "dataset_size_in_gb", "3"), resource.TestCheckResourceAttr(resourceName, "support_oss_cluster_api", "false"), resource.TestCheckResourceAttr(resourceName, "global_data_persistence", "none"), resource.TestCheckResourceAttr(resourceName, "external_endpoint_for_oss_cluster_api", "false"), @@ -107,7 +107,7 @@ func TestAccResourceRedisCloudActiveActiveDatabase_CRUDI(t *testing.T) { resource.TestCheckResourceAttrSet(datasourceName, "subscription_id"), resource.TestCheckResourceAttrSet(datasourceName, "db_id"), resource.TestCheckResourceAttr(datasourceName, "name", name), - resource.TestCheckResourceAttr(datasourceName, "memory_limit_in_gb", "3"), + resource.TestCheckResourceAttr(datasourceName, "dataset_size_in_gb", "3"), resource.TestCheckResourceAttr(datasourceName, "support_oss_cluster_api", "false"), resource.TestCheckResourceAttr(datasourceName, "external_endpoint_for_oss_cluster_api", "false"), resource.TestCheckResourceAttr(datasourceName, "enable_tls", "false"), @@ -124,7 +124,7 @@ func TestAccResourceRedisCloudActiveActiveDatabase_CRUDI(t *testing.T) { Config: fmt.Sprintf(testAccResourceRedisCloudActiveActiveDatabaseUpdate, subscriptionName, name), Check: resource.ComposeAggregateTestCheckFunc( // Test resource - resource.TestCheckResourceAttr(resourceName, "memory_limit_in_gb", "1"), + resource.TestCheckResourceAttr(resourceName, "dataset_size_in_gb", "1"), resource.TestCheckResourceAttr(resourceName, "support_oss_cluster_api", "true"), resource.TestCheckResourceAttr(resourceName, "external_endpoint_for_oss_cluster_api", "true"), resource.TestCheckResourceAttr(resourceName, "global_data_persistence", "aof-every-1-second"), @@ -147,7 +147,7 @@ func TestAccResourceRedisCloudActiveActiveDatabase_CRUDI(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "override_region.0.override_global_source_ips.#", "0"), // Test datasource - resource.TestCheckResourceAttr(datasourceName, "memory_limit_in_gb", "1"), + resource.TestCheckResourceAttr(datasourceName, "dataset_size_in_gb", "1"), resource.TestCheckResourceAttr(datasourceName, "support_oss_cluster_api", "true"), resource.TestCheckResourceAttr(datasourceName, "external_endpoint_for_oss_cluster_api", "true"), ), @@ -156,7 +156,7 @@ func TestAccResourceRedisCloudActiveActiveDatabase_CRUDI(t *testing.T) { { Config: fmt.Sprintf(testAccResourceRedisCloudActiveActiveDatabaseUpdateNoAlerts, subscriptionName, name), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "memory_limit_in_gb", "1"), + resource.TestCheckResourceAttr(resourceName, "dataset_size_in_gb", "1"), resource.TestCheckResourceAttr(resourceName, "support_oss_cluster_api", "true"), resource.TestCheckResourceAttr(resourceName, "external_endpoint_for_oss_cluster_api", "true"), resource.TestCheckResourceAttr(resourceName, "global_data_persistence", "aof-every-1-second"), @@ -259,7 +259,7 @@ const activeActiveSubscriptionBoilerplate = ` cloud_provider = "AWS" creation_plan { - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 quantity = 1 region { region = "us-east-1" @@ -283,7 +283,7 @@ const testAccResourceRedisCloudActiveActiveDatabase = activeActiveSubscriptionBo resource "rediscloud_active_active_subscription_database" "example" { subscription_id = rediscloud_active_active_subscription.example.id name = "%s" - memory_limit_in_gb = 3 + dataset_size_in_gb = 3 support_oss_cluster_api = false external_endpoint_for_oss_cluster_api = false enable_tls = false @@ -328,7 +328,7 @@ const testAccResourceRedisCloudActiveActiveDatabaseUpdate = activeActiveSubscrip resource "rediscloud_active_active_subscription_database" "example" { subscription_id = rediscloud_active_active_subscription.example.id name = "%s" - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 support_oss_cluster_api = true external_endpoint_for_oss_cluster_api = true @@ -362,7 +362,7 @@ const testAccResourceRedisCloudActiveActiveDatabaseUpdateNoAlerts = activeActive resource "rediscloud_active_active_subscription_database" "example" { subscription_id = rediscloud_active_active_subscription.example.id name = "%s" - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 support_oss_cluster_api = true external_endpoint_for_oss_cluster_api = true @@ -385,7 +385,7 @@ const testAccResourceRedisCloudActiveActiveDatabaseImport = activeActiveSubscrip resource "rediscloud_active_active_subscription_database" "example" { subscription_id = rediscloud_active_active_subscription.example.id name = "%s" - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 } ` @@ -401,7 +401,7 @@ resource "rediscloud_active_active_subscription" "example" { redis_version = "latest" creation_plan { - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 quantity = 1 region { region = "us-east-1" @@ -421,7 +421,7 @@ resource "rediscloud_active_active_subscription" "example" { resource "rediscloud_active_active_subscription_database" "example" { subscription_id = rediscloud_active_active_subscription.example.id name = "%s" - memory_limit_in_gb = 3 + dataset_size_in_gb = 3 support_oss_cluster_api = false external_endpoint_for_oss_cluster_api = false enable_tls = false @@ -455,7 +455,7 @@ const testAccResourceRedisCloudActiveActiveDatabaseInvalidTimeUtc = activeActive resource "rediscloud_active_active_subscription_database" "example" { subscription_id = rediscloud_active_active_subscription.example.id name = "%s" - memory_limit_in_gb = 3 + dataset_size_in_gb = 3 support_oss_cluster_api = false external_endpoint_for_oss_cluster_api = false enable_tls = false diff --git a/provider/resource_rediscloud_active_active_database.go b/provider/resource_rediscloud_active_active_database.go index 68cc4f1d..1e93a1d8 100644 --- a/provider/resource_rediscloud_active_active_database.go +++ b/provider/resource_rediscloud_active_active_database.go @@ -84,9 +84,18 @@ func resourceRedisCloudActiveActiveDatabase() *schema.Resource { ValidateDiagFunc: validation.ToDiagFunc(validation.StringLenBetween(0, 40)), }, "memory_limit_in_gb": { - Description: "Maximum memory usage for this specific database", - Type: schema.TypeFloat, - Required: true, + Description: "(Deprecated) Maximum memory usage for this specific database", + Type: schema.TypeFloat, + Optional: true, + Computed: true, + ExactlyOneOf: []string{"memory_limit_in_gb", "dataset_size_in_gb"}, + }, + "dataset_size_in_gb": { + Description: "Maximum amount of data in the dataset for this specific database in GB", + Type: schema.TypeFloat, + Optional: true, + Computed: true, + ExactlyOneOf: []string{"memory_limit_in_gb", "dataset_size_in_gb"}, }, "support_oss_cluster_api": { Description: "Support Redis open-source (OSS) Cluster API", @@ -457,7 +466,6 @@ func resourceRedisCloudActiveActiveDatabaseCreate(ctx context.Context, d *schema subscriptionMutex.Lock(subId) name := d.Get("name").(string) - memoryLimitInGB := d.Get("memory_limit_in_gb").(float64) supportOSSClusterAPI := d.Get("support_oss_cluster_api").(bool) useExternalEndpointForOSSClusterAPI := d.Get("external_endpoint_for_oss_cluster_api").(bool) dataEviction := d.Get("data_eviction").(string) @@ -512,7 +520,6 @@ func resourceRedisCloudActiveActiveDatabaseCreate(ctx context.Context, d *schema createDatabase := databases.CreateActiveActiveDatabase{ DryRun: redis.Bool(false), Name: redis.String(name), - MemoryLimitInGB: redis.Float64(memoryLimitInGB), SupportOSSClusterAPI: redis.Bool(supportOSSClusterAPI), UseExternalEndpointForOSSClusterAPI: redis.Bool(useExternalEndpointForOSSClusterAPI), GlobalSourceIP: globalSourceIp, @@ -533,6 +540,14 @@ func resourceRedisCloudActiveActiveDatabaseCreate(ctx context.Context, d *schema createDatabase.GlobalPassword = redis.String(globalPassword) } + if v, ok := d.GetOk("dataset_size_in_gb"); ok { + createDatabase.DatasetSizeInGB = redis.Float64(v.(float64)) + } + + if v, ok := d.GetOk("memory_limit_in_gb"); ok { + createDatabase.MemoryLimitInGB = redis.Float64(v.(float64)) + } + if v, ok := d.GetOk("port"); ok { createDatabase.PortNumber = redis.Int(v.(int)) } @@ -618,12 +633,23 @@ func resourceRedisCloudActiveActiveDatabaseRead(ctx context.Context, d *schema.R return diag.FromErr(err) } - if err := d.Set("memory_limit_in_gb", redis.Float64(*db.CrdbDatabases[0].MemoryLimitInGB)); err != nil { + if err := d.Set("enable_tls", redis.BoolValue(db.CrdbDatabases[0].Security.EnableTls)); err != nil { return diag.FromErr(err) } - if err := d.Set("enable_tls", redis.BoolValue(db.CrdbDatabases[0].Security.EnableTls)); err != nil { - return diag.FromErr(err) + // To prevent both fields being included in API requests, only one of these two fields should be set in the state + // Only add `dataset_size_in_gb` to the state if `memory_limit_in_gb` is not already in the state + if _, inState := d.GetOk("memory_limit_in_gb"); !inState { + if err := d.Set("dataset_size_in_gb", redis.Float64(*db.CrdbDatabases[0].DatasetSizeInGB)); err != nil { + return diag.FromErr(err) + } + } + + // Likewise, only add `memory_limit_in_gb` to the state if `dataset_size_in_gb` is not already in the state + if _, inState := d.GetOk("dataset_size_in_gb"); !inState { + if err := d.Set("memory_limit_in_gb", redis.Float64(*db.CrdbDatabases[0].MemoryLimitInGB)); err != nil { + return diag.FromErr(err) + } } var regionDbConfigs []map[string]interface{} @@ -839,7 +865,6 @@ func resourceRedisCloudActiveActiveDatabaseUpdate(ctx context.Context, d *schema // Populate the database update request with the required fields update := databases.UpdateActiveActiveDatabase{ - MemoryLimitInGB: redis.Float64(d.Get("memory_limit_in_gb").(float64)), SupportOSSClusterAPI: redis.Bool(d.Get("support_oss_cluster_api").(bool)), UseExternalEndpointForOSSClusterAPI: redis.Bool(d.Get("external_endpoint_for_oss_cluster_api").(bool)), DataEvictionPolicy: redis.String(d.Get("data_eviction").(string)), @@ -848,6 +873,15 @@ func resourceRedisCloudActiveActiveDatabaseUpdate(ctx context.Context, d *schema Regions: regions, } + // One of the following fields must be set in the request, validation is handled in the schema (ExactlyOneOf) + if v, ok := d.GetOk("dataset_size_in_gb"); ok { + update.DatasetSizeInGB = redis.Float64(v.(float64)) + } + + if v, ok := d.GetOk("memory_limit_in_gb"); ok { + update.MemoryLimitInGB = redis.Float64(v.(float64)) + } + // The below fields are optional and will only be sent in the request if they are present in the Terraform configuration if len(globalSourceIps) == 0 { update.GlobalSourceIP = []*string{redis.String("0.0.0.0/0")} diff --git a/provider/resource_rediscloud_active_active_subscription.go b/provider/resource_rediscloud_active_active_subscription.go index 06f478ef..731af1e3 100644 --- a/provider/resource_rediscloud_active_active_subscription.go +++ b/provider/resource_rediscloud_active_active_subscription.go @@ -101,9 +101,16 @@ func resourceRedisCloudActiveActiveSubscription() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "memory_limit_in_gb": { - Description: "Maximum memory usage for each database", - Type: schema.TypeFloat, - Required: true, + Description: "(Deprecated) Maximum memory usage for this specific database", + Type: schema.TypeFloat, + Optional: true, + ConflictsWith: []string{"creation_plan.0.dataset_size_in_gb"}, + }, + "dataset_size_in_gb": { + Description: "Maximum amount of data in the dataset for this specific database in GB", + Type: schema.TypeFloat, + Optional: true, + ConflictsWith: []string{"creation_plan.0.memory_limit_in_gb"}, }, "quantity": { Description: "The planned number of databases", @@ -619,6 +626,7 @@ func buildSubscriptionCreatePlanAADatabases(planMap map[string]interface{}) []*s idx := 1 numDatabases := planMap["quantity"].(int) memoryLimitInGB := planMap["memory_limit_in_gb"].(float64) + datasetSizeInGB := planMap["dataset_size_in_gb"].(float64) regions := planMap["region"] var localThroughputs []*subscriptions.CreateLocalThroughput for _, v := range regions.(*schema.Set).List() { @@ -640,23 +648,28 @@ func buildSubscriptionCreatePlanAADatabases(planMap map[string]interface{}) []*s } // create the remaining DBs with all other modules - createDatabases = append(createDatabases, createAADatabase(dbName, &idx, localThroughputs, numDatabases, memoryLimitInGB, createModules)...) + createDatabases = append(createDatabases, createAADatabase(dbName, &idx, localThroughputs, numDatabases, memoryLimitInGB, datasetSizeInGB, createModules)...) return createDatabases } // createDatabase returns a CreateDatabase struct with the given parameters -func createAADatabase(dbName string, idx *int, localThroughputs []*subscriptions.CreateLocalThroughput, numDatabases int, memoryLimitInGB float64, modules []*subscriptions.CreateModules) []*subscriptions.CreateDatabase { +func createAADatabase(dbName string, idx *int, localThroughputs []*subscriptions.CreateLocalThroughput, numDatabases int, memoryLimitInGB float64, datasetSizeInGB float64, modules []*subscriptions.CreateModules) []*subscriptions.CreateDatabase { var dbs []*subscriptions.CreateDatabase for i := 0; i < numDatabases; i++ { createDatabase := subscriptions.CreateDatabase{ Name: redis.String(dbName + strconv.Itoa(*idx)), Protocol: redis.String("redis"), - MemoryLimitInGB: redis.Float64(memoryLimitInGB), LocalThroughputMeasurement: localThroughputs, Quantity: redis.Int(1), Modules: modules, } + if datasetSizeInGB > 0 { + createDatabase.DatasetSizeInGB = redis.Float64(datasetSizeInGB) + } + if memoryLimitInGB > 0 { + createDatabase.MemoryLimitInGB = redis.Float64(memoryLimitInGB) + } *idx++ dbs = append(dbs, &createDatabase) } diff --git a/provider/resource_rediscloud_pro_database.go b/provider/resource_rediscloud_pro_database.go index 5be6654b..633d72bf 100644 --- a/provider/resource_rediscloud_pro_database.go +++ b/provider/resource_rediscloud_pro_database.go @@ -3,12 +3,13 @@ package provider import ( "context" "fmt" - redisTags "github.com/RedisLabs/rediscloud-go-api/service/tags" - "github.com/hashicorp/go-cty/cty" "strconv" "strings" "time" + redisTags "github.com/RedisLabs/rediscloud-go-api/service/tags" + "github.com/hashicorp/go-cty/cty" + "github.com/RedisLabs/rediscloud-go-api/redis" "github.com/RedisLabs/rediscloud-go-api/service/databases" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" @@ -77,9 +78,18 @@ func resourceRedisCloudProDatabase() *schema.Resource { Default: "redis", }, "memory_limit_in_gb": { - Description: "Maximum memory usage for this specific database", - Type: schema.TypeFloat, - Required: true, + Description: "(Deprecated) Maximum memory usage for this specific database", + Type: schema.TypeFloat, + Optional: true, + Computed: true, + ExactlyOneOf: []string{"memory_limit_in_gb", "dataset_size_in_gb"}, + }, + "dataset_size_in_gb": { + Description: "Maximum amount of data in the dataset for this specific database in GB", + Type: schema.TypeFloat, + Optional: true, + Computed: true, + ExactlyOneOf: []string{"memory_limit_in_gb", "dataset_size_in_gb"}, }, "support_oss_cluster_api": { Description: "Support Redis open-source (OSS) Cluster API", @@ -451,7 +461,6 @@ func resourceRedisCloudProDatabaseCreate(ctx context.Context, d *schema.Resource name := d.Get("name").(string) protocol := d.Get("protocol").(string) - memoryLimitInGB := d.Get("memory_limit_in_gb").(float64) supportOSSClusterAPI := d.Get("support_oss_cluster_api").(bool) respVersion := d.Get("resp_version").(string) dataPersistence := d.Get("data_persistence").(string) @@ -495,7 +504,6 @@ func resourceRedisCloudProDatabaseCreate(ctx context.Context, d *schema.Resource createDatabase := databases.CreateDatabase{ Name: redis.String(name), Protocol: redis.String(protocol), - MemoryLimitInGB: redis.Float64(memoryLimitInGB), SupportOSSClusterAPI: redis.Bool(supportOSSClusterAPI), DataPersistence: redis.String(dataPersistence), DataEvictionPolicy: redis.String(dataEviction), @@ -517,6 +525,14 @@ func resourceRedisCloudProDatabaseCreate(ctx context.Context, d *schema.Resource createDatabase.AverageItemSizeInBytes = &averageItemSizeInBytes } + if v, ok := d.GetOk("dataset_size_in_gb"); ok { + createDatabase.DatasetSizeInGB = redis.Float64(v.(float64)) + } + + if v, ok := d.GetOk("memory_limit_in_gb"); ok { + createDatabase.MemoryLimitInGB = redis.Float64(v.(float64)) + } + if v, ok := d.GetOk("port"); ok { createDatabase.PortNumber = redis.Int(v.(int)) } @@ -590,10 +606,6 @@ func resourceRedisCloudProDatabaseRead(ctx context.Context, d *schema.ResourceDa return diag.FromErr(err) } - if err := d.Set("memory_limit_in_gb", redis.Float64Value(db.MemoryLimitInGB)); err != nil { - return diag.FromErr(err) - } - if err := d.Set("support_oss_cluster_api", redis.BoolValue(db.SupportOSSClusterAPI)); err != nil { return diag.FromErr(err) } @@ -647,6 +659,21 @@ func resourceRedisCloudProDatabaseRead(ctx context.Context, d *schema.ResourceDa return diag.FromErr(err) } + // To prevent both fields being included in API requests, only one of these two fields should be set in the state + // Only add `dataset_size_in_gb` to the state if `memory_limit_in_gb` is not already in the state + if _, inState := d.GetOk("memory_limit_in_gb"); !inState { + if err := d.Set("dataset_size_in_gb", redis.Float64Value(db.DatasetSizeInGB)); err != nil { + return diag.FromErr(err) + } + } + + // Likewise, only add `memory_limit_in_gb` to the state if `dataset_size_in_gb` is not already in the state + if _, inState := d.GetOk("dataset_size_in_gb"); !inState { + if err := d.Set("memory_limit_in_gb", redis.Float64Value(db.MemoryLimitInGB)); err != nil { + return diag.FromErr(err) + } + } + password := d.Get("password").(string) if redis.StringValue(db.Protocol) == "redis" { // Only db with the "redis" protocol returns the password. @@ -783,7 +810,6 @@ func resourceRedisCloudProDatabaseUpdate(ctx context.Context, d *schema.Resource update := databases.UpdateDatabase{ Name: redis.String(d.Get("name").(string)), - MemoryLimitInGB: redis.Float64(d.Get("memory_limit_in_gb").(float64)), SupportOSSClusterAPI: redis.Bool(d.Get("support_oss_cluster_api").(bool)), Replication: redis.Bool(d.Get("replication").(bool)), ThroughputMeasurement: &databases.UpdateThroughputMeasurement{ @@ -797,6 +823,17 @@ func resourceRedisCloudProDatabaseUpdate(ctx context.Context, d *schema.Resource RemoteBackup: buildBackupPlan(d.Get("remote_backup").([]interface{}), d.Get("periodic_backup_path")), EnableDefaultUser: redis.Bool(d.Get("enable_default_user").(bool)), } + + // One of the following fields must be set, validation is handled in the schema (ExactlyOneOf) + if v, ok := d.GetOk("dataset_size_in_gb"); ok { + update.DatasetSizeInGB = redis.Float64(v.(float64)) + } else { + if v, ok := d.GetOk("memory_limit_in_gb"); ok { + update.MemoryLimitInGB = redis.Float64(v.(float64)) + } + } + + // The below fields are optional and will only be sent in the request if they are present in the Terraform configuration if len(setToStringSlice(d.Get("source_ips").(*schema.Set))) == 0 { update.SourceIP = []*string{redis.String("0.0.0.0/0")} } diff --git a/provider/resource_rediscloud_pro_database_test.go b/provider/resource_rediscloud_pro_database_test.go index 9fa75b0d..79e5c627 100644 --- a/provider/resource_rediscloud_pro_database_test.go +++ b/provider/resource_rediscloud_pro_database_test.go @@ -37,7 +37,7 @@ func TestAccResourceRedisCloudProDatabase_CRUDI(t *testing.T) { Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "name", "example"), resource.TestCheckResourceAttr(resourceName, "protocol", "redis"), - resource.TestCheckResourceAttr(resourceName, "memory_limit_in_gb", "3"), + resource.TestCheckResourceAttr(resourceName, "dataset_size_in_gb", "3"), resource.TestCheckResourceAttr(resourceName, "replication", "false"), resource.TestCheckResourceAttr(resourceName, "support_oss_cluster_api", "false"), resource.TestCheckResourceAttr(resourceName, "resp_version", "resp3"), @@ -63,7 +63,7 @@ func TestAccResourceRedisCloudProDatabase_CRUDI(t *testing.T) { // Replica tests resource.TestCheckResourceAttr(replicaResourceName, "name", "example-replica"), // should be the value specified in the replica config, rather than the primary database - resource.TestCheckResourceAttr(replicaResourceName, "memory_limit_in_gb", "1"), + resource.TestCheckResourceAttr(replicaResourceName, "dataset_size_in_gb", "1"), resource.TestCheckResourceAttr(replicaResourceName, "replica_of.#", "1"), // Test databases exist @@ -104,7 +104,7 @@ func TestAccResourceRedisCloudProDatabase_CRUDI(t *testing.T) { Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "name", "example-updated"), resource.TestCheckResourceAttr(resourceName, "protocol", "redis"), - resource.TestCheckResourceAttr(resourceName, "memory_limit_in_gb", "1"), + resource.TestCheckResourceAttr(resourceName, "dataset_size_in_gb", "1"), resource.TestCheckResourceAttr(resourceName, "replication", "true"), resource.TestCheckResourceAttr(resourceName, "support_oss_cluster_api", "true"), resource.TestCheckResourceAttr(resourceName, "resp_version", "resp3"), @@ -290,7 +290,7 @@ resource "rediscloud_subscription" "example" { } creation_plan { - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 throughput_measurement_by = "operations-per-second" throughput_measurement_value = 1000 quantity = 1 @@ -328,7 +328,7 @@ resource "rediscloud_subscription" "example" { } } creation_plan { - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 quantity = 1 replication = false support_oss_cluster_api = false @@ -346,7 +346,7 @@ resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "example" protocol = "redis" - memory_limit_in_gb = 3 + dataset_size_in_gb = 3 data_persistence = "none" data_eviction = "allkeys-random" throughput_measurement_by = "operations-per-second" @@ -382,7 +382,7 @@ const testAccResourceRedisCloudProDatabaseOptionalAttributes = proSubscriptionBo resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "example-no-protocol" - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 data_persistence = "none" throughput_measurement_by = "operations-per-second" throughput_measurement_value = 1000 @@ -394,7 +394,7 @@ const testAccResourceRedisCloudProDatabaseInvalidTimeUtc = proSubscriptionBoiler resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "example-no-protocol" - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 data_persistence = "none" throughput_measurement_by = "operations-per-second" throughput_measurement_value = 1000 @@ -413,7 +413,7 @@ resource "rediscloud_subscription_database" "no_password_database" { subscription_id = rediscloud_subscription.example.id name = "example-no-password" protocol = "redis" - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 data_persistence = "none" throughput_measurement_by = "operations-per-second" throughput_measurement_value = 1000 @@ -426,7 +426,7 @@ resource "rediscloud_subscription_database" "example_replica" { subscription_id = rediscloud_subscription.example.id name = "example-replica" protocol = "redis" - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 throughput_measurement_by = "operations-per-second" throughput_measurement_value = 1000 replica_of = [format("redis://%s", rediscloud_subscription_database.example.public_endpoint)] @@ -439,7 +439,7 @@ resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "example-updated" protocol = "redis" - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 data_persistence = "aof-every-write" data_eviction = "volatile-lru" throughput_measurement_by = "operations-per-second" @@ -469,7 +469,7 @@ resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "example-updated" protocol = "redis" - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 data_persistence = "aof-every-write" data_eviction = "volatile-lru" throughput_measurement_by = "operations-per-second" @@ -493,7 +493,7 @@ resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "%s" protocol = "redis" - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 data_persistence = "none" throughput_measurement_by = "operations-per-second" throughput_measurement_value = 1000 @@ -516,7 +516,7 @@ const testAccResourceRedisCloudProDatabaseRespVersions = proSubscriptionBoilerpl resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "example" - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 data_persistence = "none" throughput_measurement_by = "operations-per-second" throughput_measurement_value = 1000 diff --git a/provider/resource_rediscloud_pro_subscription.go b/provider/resource_rediscloud_pro_subscription.go index f5dafd8a..922606c4 100644 --- a/provider/resource_rediscloud_pro_subscription.go +++ b/provider/resource_rediscloud_pro_subscription.go @@ -244,9 +244,16 @@ func resourceRedisCloudProSubscription() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "memory_limit_in_gb": { - Description: "Maximum memory usage for each database", - Type: schema.TypeFloat, - Required: true, + Description: "(Deprecated) Maximum memory usage for each database", + Type: schema.TypeFloat, + Optional: true, + ConflictsWith: []string{"creation_plan.0.dataset_size_in_gb"}, + }, + "dataset_size_in_gb": { + Description: "Maximum amount of data in the dataset for this specific database in GB", + Type: schema.TypeFloat, + Optional: true, + ConflictsWith: []string{"creation_plan.0.memory_limit_in_gb"}, }, "throughput_measurement_by": { Description: "Throughput measurement method, (either ‘number-of-shards’ or ‘operations-per-second’)", @@ -773,7 +780,6 @@ func buildSubscriptionCreatePlanDatabases(memoryStorage string, planMap map[stri dbName := "creation-plan-db-" idx := 1 - memoryLimitInGB := planMap["memory_limit_in_gb"].(float64) throughputMeasurementBy := planMap["throughput_measurement_by"].(string) throughputMeasurementValue := planMap["throughput_measurement_value"].(int) averageItemSizeInBytes := planMap["average_item_size_in_bytes"].(int) @@ -782,6 +788,16 @@ func buildSubscriptionCreatePlanDatabases(memoryStorage string, planMap map[stri replication := planMap["replication"].(bool) planModules := interfaceToStringSlice(planMap["modules"].([]interface{})) + memoryLimitInGB := 0.0 + if v, ok := planMap["memory_limit_in_gb"]; ok && v != nil { + memoryLimitInGB = v.(float64) + } + + datasetSizeInGB := 0.0 + if v, ok := planMap["dataset_size_in_gb"]; ok && v != nil { + datasetSizeInGB = v.(float64) + } + var diags diag.Diagnostics if memoryStorage == databases.MemoryStorageRam && averageItemSizeInBytes != 0 { // TODO This should be changed to an error when releasing 2.0 of the provider @@ -808,7 +824,7 @@ func buildSubscriptionCreatePlanDatabases(memoryStorage string, planMap map[stri for _, v := range planModules { modules = append(modules, &subscriptions.CreateModules{Name: v}) } - createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules, throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, numDatabases)...) + createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules, throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, datasetSizeInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, numDatabases)...) } else { // make RedisGraph module the first module, then append the rest of the modules var modules []*subscriptions.CreateModules @@ -819,20 +835,20 @@ func buildSubscriptionCreatePlanDatabases(memoryStorage string, planMap map[stri } } // create a DB with the RedisGraph module - createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules[:1], throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, 1)...) + createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules[:1], throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, datasetSizeInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, 1)...) if numDatabases == 1 { // create one extra DB with all other modules - createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules[1:], throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, 1)...) + createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules[1:], throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, datasetSizeInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, 1)...) } else if numDatabases > 1 { // create the remaining DBs with all other modules - createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules[1:], throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, numDatabases-1)...) + createDatabases = append(createDatabases, createDatabase(dbName, &idx, modules[1:], throughputMeasurementBy, throughputMeasurementValue, memoryLimitInGB, datasetSizeInGB, averageItemSizeInBytes, supportOSSClusterAPI, replication, numDatabases-1)...) } } return createDatabases, diags } // createDatabase returns a CreateDatabase struct with the given parameters -func createDatabase(dbName string, idx *int, modules []*subscriptions.CreateModules, throughputMeasurementBy string, throughputMeasurementValue int, memoryLimitInGB float64, averageItemSizeInBytes int, supportOSSClusterAPI bool, replication bool, numDatabases int) []*subscriptions.CreateDatabase { +func createDatabase(dbName string, idx *int, modules []*subscriptions.CreateModules, throughputMeasurementBy string, throughputMeasurementValue int, memoryLimitInGB float64, datasetSizeInGB float64, averageItemSizeInBytes int, supportOSSClusterAPI bool, replication bool, numDatabases int) []*subscriptions.CreateDatabase { createThroughput := &subscriptions.CreateThroughput{ By: redis.String(throughputMeasurementBy), Value: redis.Int(throughputMeasurementValue), @@ -855,7 +871,6 @@ func createDatabase(dbName string, idx *int, modules []*subscriptions.CreateModu createDatabase := subscriptions.CreateDatabase{ Name: redis.String(dbName + strconv.Itoa(*idx)), Protocol: redis.String("redis"), - MemoryLimitInGB: redis.Float64(memoryLimitInGB), SupportOSSClusterAPI: redis.Bool(supportOSSClusterAPI), Replication: redis.Bool(replication), ThroughputMeasurement: createThroughput, @@ -865,6 +880,13 @@ func createDatabase(dbName string, idx *int, modules []*subscriptions.CreateModu if averageItemSizeInBytes > 0 { createDatabase.AverageItemSizeInBytes = redis.Int(averageItemSizeInBytes) } + + if datasetSizeInGB > 0 { + createDatabase.DatasetSizeInGB = redis.Float64(datasetSizeInGB) + } + if memoryLimitInGB > 0 { + createDatabase.MemoryLimitInGB = redis.Float64(memoryLimitInGB) + } *idx++ dbs = append(dbs, &createDatabase) } diff --git a/provider/resource_rediscloud_pro_subscription_test.go b/provider/resource_rediscloud_pro_subscription_test.go index c1d17ab6..572ba72f 100644 --- a/provider/resource_rediscloud_pro_subscription_test.go +++ b/provider/resource_rediscloud_pro_subscription_test.go @@ -48,7 +48,7 @@ func TestAccResourceRedisCloudProSubscription_CRUDI(t *testing.T) { resource.TestCheckResourceAttrSet(resourceName, "cloud_provider.0.region.0.networks.0.networking_subnet_id"), resource.TestCheckResourceAttr(resourceName, "creation_plan.#", "1"), resource.TestCheckResourceAttr(resourceName, "creation_plan.0.average_item_size_in_bytes", "0"), - resource.TestCheckResourceAttr(resourceName, "creation_plan.0.memory_limit_in_gb", "1"), + resource.TestCheckResourceAttr(resourceName, "creation_plan.0.dataset_size_in_gb", "1"), resource.TestCheckResourceAttr(resourceName, "creation_plan.0.modules.#", "2"), resource.TestCheckResourceAttr(resourceName, "creation_plan.0.modules.0", "RedisJSON"), resource.TestCheckResourceAttr(resourceName, "creation_plan.0.modules.1", "RedisBloom"), @@ -88,7 +88,7 @@ func TestAccResourceRedisCloudProSubscription_CRUDI(t *testing.T) { Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "creation_plan.#", "1"), resource.TestCheckResourceAttr(resourceName, "creation_plan.0.average_item_size_in_bytes", "0"), - resource.TestCheckResourceAttr(resourceName, "creation_plan.0.memory_limit_in_gb", "1"), + resource.TestCheckResourceAttr(resourceName, "creation_plan.0.dataset_size_in_gb", "1"), resource.TestCheckResourceAttr(resourceName, "creation_plan.0.quantity", "1"), resource.TestCheckResourceAttr(resourceName, "creation_plan.0.replication", "false"), resource.TestCheckResourceAttr(resourceName, "creation_plan.0.support_oss_cluster_api", "false"), @@ -422,7 +422,7 @@ func TestFlexSubModulesAllocationWhenGraphAndQuantityIsOne(t *testing.T) { numDatabases := 1 planMap := map[string]interface{}{ "average_item_size_in_bytes": 1000, - "memory_limit_in_gb": float64(1), + "dataset_size_in_gb": float64(1), "modules": []interface{}{"RedisJSON", "RedisGraph", "RedisBloom"}, "quantity": numDatabases, "replication": false, @@ -457,7 +457,7 @@ func TestFlexSubModulesAllocationWhenGraphAndQuantityMoreThanOne(t *testing.T) { numDatabases := 5 planMap := map[string]interface{}{ "average_item_size_in_bytes": 0, - "memory_limit_in_gb": float64(1), + "dataset_size_in_gb": float64(1), "modules": []interface{}{"RedisJSON", "RedisGraph", "RedisBloom"}, "quantity": numDatabases, "replication": false, @@ -491,7 +491,7 @@ func TestFlexSubModulesAllocationWhenOnlyGraphModule(t *testing.T) { numDatabases := 5 planMap := map[string]interface{}{ "average_item_size_in_bytes": 0, - "memory_limit_in_gb": float64(1), + "dataset_size_in_gb": float64(1), "modules": []interface{}{"RedisGraph"}, "quantity": numDatabases, "replication": false, @@ -513,7 +513,7 @@ func TestFlexSubModulesAllocationWhenNoGraph(t *testing.T) { numDatabases := 5 planMap := map[string]interface{}{ "average_item_size_in_bytes": 0, - "memory_limit_in_gb": float64(1), + "dataset_size_in_gb": float64(1), "modules": []interface{}{"RedisJSON", "RediSearch", "RedisBloom"}, "quantity": numDatabases, "replication": false, @@ -537,7 +537,7 @@ func TestFlexSubModulesAllocationWhenNoGraph(t *testing.T) { func TestFlexSubNoModulesInCreatePlanDatabases(t *testing.T) { planMap := map[string]interface{}{ "average_item_size_in_bytes": 0, - "memory_limit_in_gb": float64(1), + "dataset_size_in_gb": float64(1), "modules": []interface{}{}, "quantity": 2, "replication": false, @@ -557,7 +557,7 @@ func TestFlexSubNoModulesInCreatePlanDatabases(t *testing.T) { func TestFlexSubNoAverageItemSizeInBytes(t *testing.T) { planMap := map[string]interface{}{ "average_item_size_in_bytes": 0, // 0 is the value that is returned when the field is not present - "memory_limit_in_gb": float64(1), + "dataset_size_in_gb": float64(1), "modules": []interface{}{}, "quantity": 2, "replication": false, @@ -576,7 +576,7 @@ func TestFlexSubNoAverageItemSizeInBytes(t *testing.T) { func TestFlexSubRediSearchThroughputMeasurementWhenReplicationIsFalse(t *testing.T) { planMap := map[string]interface{}{ "average_item_size_in_bytes": 0, - "memory_limit_in_gb": float64(1), + "dataset_size_in_gb": float64(1), "modules": []interface{}{"RediSearch"}, "quantity": 2, "replication": false, @@ -594,7 +594,7 @@ func TestFlexSubRediSearchThroughputMeasurementWhenReplicationIsFalse(t *testing func TestFlexSubRediSearchThroughputMeasurementWhenReplicationIsTrue(t *testing.T) { planMap := map[string]interface{}{ "average_item_size_in_bytes": 0, - "memory_limit_in_gb": float64(1), + "dataset_size_in_gb": float64(1), "modules": []interface{}{"RediSearch"}, "quantity": 2, "replication": true, @@ -612,7 +612,7 @@ func TestFlexSubRediSearchThroughputMeasurementWhenReplicationIsTrue(t *testing. func TestFlexSubRedisGraphThroughputMeasurementWhenReplicationIsFalse(t *testing.T) { planMap := map[string]interface{}{ "average_item_size_in_bytes": 0, - "memory_limit_in_gb": float64(1), + "dataset_size_in_gb": float64(1), "modules": []interface{}{"RedisGraph"}, "quantity": 2, "replication": false, @@ -630,7 +630,7 @@ func TestFlexSubRedisGraphThroughputMeasurementWhenReplicationIsFalse(t *testing func TestFlexSubRedisGraphThroughputMeasurementWhenReplicationIsTrue(t *testing.T) { planMap := map[string]interface{}{ "average_item_size_in_bytes": 1000, - "memory_limit_in_gb": float64(1), + "dataset_size_in_gb": float64(1), "modules": []interface{}{"RedisGraph"}, "quantity": 2, "replication": true, @@ -709,7 +709,7 @@ resource "rediscloud_subscription" "example" { } creation_plan { - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 quantity = 1 replication=false support_oss_cluster_api=false @@ -755,7 +755,7 @@ resource "rediscloud_subscription" "test" { } creation_plan { - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 quantity = 1 replication=false support_oss_cluster_api=false @@ -798,7 +798,7 @@ resource "rediscloud_subscription" "example" { } creation_plan { - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 quantity = 1 replication=false support_oss_cluster_api=false @@ -872,7 +872,7 @@ resource "rediscloud_subscription" "example" { } creation_plan { - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 quantity = 1 replication=false support_oss_cluster_api=false @@ -912,7 +912,7 @@ resource "rediscloud_subscription" "example" { } creation_plan { - memory_limit_in_gb = 2 + dataset_size_in_gb = 2 quantity = 1 replication=false support_oss_cluster_api=false @@ -953,7 +953,7 @@ resource "rediscloud_subscription" "example" { } creation_plan { - memory_limit_in_gb = 2 + dataset_size_in_gb = 2 quantity = 1 replication=false support_oss_cluster_api=false @@ -993,7 +993,7 @@ resource "rediscloud_subscription" "example" { } creation_plan { - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 quantity = 1 replication=false support_oss_cluster_api=false diff --git a/provider/resource_rediscloud_pro_tls_test.go b/provider/resource_rediscloud_pro_tls_test.go index 47b9168f..b94aad12 100644 --- a/provider/resource_rediscloud_pro_tls_test.go +++ b/provider/resource_rediscloud_pro_tls_test.go @@ -46,7 +46,7 @@ func TestAccResourceRedisCloudSubscription_createWithDatabaseWithEnabledTlsAndSs resource.TestMatchResourceAttr(databaseName, "db_id", regexp.MustCompile("^[1-9][0-9]*$")), resource.TestCheckResourceAttrSet(databaseName, "password"), resource.TestCheckResourceAttr(databaseName, "name", "tf-database"), - resource.TestCheckResourceAttr(databaseName, "memory_limit_in_gb", "1"), + resource.TestCheckResourceAttr(databaseName, "dataset_size_in_gb", "1"), func(s *terraform.State) error { r := s.RootModule().Resources[subscriptionName] @@ -95,7 +95,7 @@ func TestAccResourceRedisCloudSubscription_createWithDatabaseWithEnabledTlsAndSs resource.TestMatchResourceAttr(databaseName, "db_id", regexp.MustCompile("^[1-9][0-9]*$")), resource.TestCheckResourceAttrSet(databaseName, "password"), resource.TestCheckResourceAttr(databaseName, "name", "tf-database"), - resource.TestCheckResourceAttr(databaseName, "memory_limit_in_gb", "1"), + resource.TestCheckResourceAttr(databaseName, "dataset_size_in_gb", "1"), ), }, // And that mTLS can be switched off altogether @@ -109,7 +109,7 @@ func TestAccResourceRedisCloudSubscription_createWithDatabaseWithEnabledTlsAndSs resource.TestMatchResourceAttr(databaseName, "db_id", regexp.MustCompile("^[1-9][0-9]*$")), resource.TestCheckResourceAttrSet(databaseName, "password"), resource.TestCheckResourceAttr(databaseName, "name", "tf-database"), - resource.TestCheckResourceAttr(databaseName, "memory_limit_in_gb", "1"), + resource.TestCheckResourceAttr(databaseName, "dataset_size_in_gb", "1"), ), }, { @@ -148,7 +148,7 @@ func TestAccResourceRedisCloudSubscription_createWithDatabaseWithEnabledTlsAndEm resource.TestMatchResourceAttr(databaseName, "db_id", regexp.MustCompile("^[1-9][0-9]*$")), resource.TestCheckResourceAttrSet(databaseName, "password"), resource.TestCheckResourceAttr(databaseName, "name", "tf-database"), - resource.TestCheckResourceAttr(databaseName, "memory_limit_in_gb", "1"), + resource.TestCheckResourceAttr(databaseName, "dataset_size_in_gb", "1"), func(s *terraform.State) error { r := s.RootModule().Resources[subscriptionName] @@ -319,7 +319,7 @@ func TestAccResourceRedisCloudSubscription_createWithDatabaseWithEnabledTlsAndTl resource.TestMatchResourceAttr(databaseName, "db_id", regexp.MustCompile("^[1-9][0-9]*$")), resource.TestCheckResourceAttrSet(databaseName, "password"), resource.TestCheckResourceAttr(databaseName, "name", "tf-database"), - resource.TestCheckResourceAttr(databaseName, "memory_limit_in_gb", "1"), + resource.TestCheckResourceAttr(databaseName, "dataset_size_in_gb", "1"), func(s *terraform.State) error { r := s.RootModule().Resources[subscriptionName] @@ -400,7 +400,7 @@ resource "rediscloud_subscription" "example" { } creation_plan { - memory_limit_in_gb = 1 + dataset_size_in_gb = 1 throughput_measurement_by = "operations-per-second" throughput_measurement_value = 1000 quantity = 1 @@ -417,7 +417,7 @@ resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "tf-database" protocol = "redis" - memory_limit_in_gb = %d + dataset_size_in_gb = %d support_oss_cluster_api = true data_persistence = "none" replication = false @@ -436,7 +436,7 @@ resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "tf-database" protocol = "redis" - memory_limit_in_gb = %d + dataset_size_in_gb = %d support_oss_cluster_api = true data_persistence = "none" replication = false @@ -454,7 +454,7 @@ resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "tf-database" protocol = "redis" - memory_limit_in_gb = %d + dataset_size_in_gb = %d support_oss_cluster_api = true data_persistence = "none" replication = false @@ -472,7 +472,7 @@ resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "tf-database" protocol = "redis" - memory_limit_in_gb = %d + dataset_size_in_gb = %d support_oss_cluster_api = true data_persistence = "none" replication = false @@ -491,7 +491,7 @@ resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "tf-database" protocol = "redis" - memory_limit_in_gb = %d + dataset_size_in_gb = %d support_oss_cluster_api = true data_persistence = "none" replication = false @@ -511,7 +511,7 @@ resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "tf-database" protocol = "redis" - memory_limit_in_gb = %d + dataset_size_in_gb = %d support_oss_cluster_api = true data_persistence = "none" replication = false @@ -530,7 +530,7 @@ resource "rediscloud_subscription_database" "example" { subscription_id = rediscloud_subscription.example.id name = "tf-database" protocol = "redis" - memory_limit_in_gb = %d + dataset_size_in_gb = %d support_oss_cluster_api = true data_persistence = "none" replication = false