Skip to content

Commit d827814

Browse files
Add redis_configs parameter to Redis Cluster (#10515) (#17956)
[upstream:210578d95111726e35616730a7d6e004bb536a1b] Signed-off-by: Modular Magician <[email protected]>
1 parent 1dea3f7 commit d827814

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

google/services/redis/resource_redis_cluster.go

+42
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,14 @@ projects/{network_project_id_or_number}/global/networks/{network_id}.`,
104104
Description: `The nodeType for the Redis cluster.
105105
If not provided, REDIS_HIGHMEM_MEDIUM will be used as default Possible values: ["REDIS_SHARED_CORE_NANO", "REDIS_HIGHMEM_MEDIUM", "REDIS_HIGHMEM_XLARGE", "REDIS_STANDARD_SMALL"]`,
106106
},
107+
"redis_configs": {
108+
Type: schema.TypeMap,
109+
Optional: true,
110+
Description: `Configure Redis Cluster behavior using a subset of native Redis configuration parameters.
111+
Please check Memorystore documentation for the list of supported parameters:
112+
https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations`,
113+
Elem: &schema.Schema{Type: schema.TypeString},
114+
},
107115
"region": {
108116
Type: schema.TypeString,
109117
Computed: true,
@@ -309,6 +317,12 @@ func resourceRedisClusterCreate(d *schema.ResourceData, meta interface{}) error
309317
} else if v, ok := d.GetOkExists("shard_count"); !tpgresource.IsEmptyValue(reflect.ValueOf(shardCountProp)) && (ok || !reflect.DeepEqual(v, shardCountProp)) {
310318
obj["shardCount"] = shardCountProp
311319
}
320+
redisConfigsProp, err := expandRedisClusterRedisConfigs(d.Get("redis_configs"), d, config)
321+
if err != nil {
322+
return err
323+
} else if v, ok := d.GetOkExists("redis_configs"); !tpgresource.IsEmptyValue(reflect.ValueOf(redisConfigsProp)) && (ok || !reflect.DeepEqual(v, redisConfigsProp)) {
324+
obj["redisConfigs"] = redisConfigsProp
325+
}
312326

313327
url, err := tpgresource.ReplaceVars(d, config, "{{RedisBasePath}}projects/{{project}}/locations/{{region}}/clusters?clusterId={{name}}")
314328
if err != nil {
@@ -455,6 +469,9 @@ func resourceRedisClusterRead(d *schema.ResourceData, meta interface{}) error {
455469
if err := d.Set("shard_count", flattenRedisClusterShardCount(res["shardCount"], d, config)); err != nil {
456470
return fmt.Errorf("Error reading Cluster: %s", err)
457471
}
472+
if err := d.Set("redis_configs", flattenRedisClusterRedisConfigs(res["redisConfigs"], d, config)); err != nil {
473+
return fmt.Errorf("Error reading Cluster: %s", err)
474+
}
458475

459476
return nil
460477
}
@@ -493,6 +510,12 @@ func resourceRedisClusterUpdate(d *schema.ResourceData, meta interface{}) error
493510
} else if v, ok := d.GetOkExists("shard_count"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, shardCountProp)) {
494511
obj["shardCount"] = shardCountProp
495512
}
513+
redisConfigsProp, err := expandRedisClusterRedisConfigs(d.Get("redis_configs"), d, config)
514+
if err != nil {
515+
return err
516+
} else if v, ok := d.GetOkExists("redis_configs"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, redisConfigsProp)) {
517+
obj["redisConfigs"] = redisConfigsProp
518+
}
496519

497520
url, err := tpgresource.ReplaceVars(d, config, "{{RedisBasePath}}projects/{{project}}/locations/{{region}}/clusters/{{name}}")
498521
if err != nil {
@@ -514,6 +537,10 @@ func resourceRedisClusterUpdate(d *schema.ResourceData, meta interface{}) error
514537
if d.HasChange("shard_count") {
515538
updateMask = append(updateMask, "shardCount")
516539
}
540+
541+
if d.HasChange("redis_configs") {
542+
updateMask = append(updateMask, "redisConfigs")
543+
}
517544
// updateMask is a URL parameter but not present in the schema, so ReplaceVars
518545
// won't set it
519546
url, err = transport_tpg.AddQueryParams(url, map[string]string{"updateMask": strings.Join(updateMask, ",")})
@@ -875,6 +902,10 @@ func flattenRedisClusterShardCount(v interface{}, d *schema.ResourceData, config
875902
return v // let terraform core handle it otherwise
876903
}
877904

905+
func flattenRedisClusterRedisConfigs(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
906+
return v
907+
}
908+
878909
func expandRedisClusterAuthorizationMode(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
879910
return v, nil
880911
}
@@ -920,3 +951,14 @@ func expandRedisClusterReplicaCount(v interface{}, d tpgresource.TerraformResour
920951
func expandRedisClusterShardCount(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
921952
return v, nil
922953
}
954+
955+
func expandRedisClusterRedisConfigs(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (map[string]string, error) {
956+
if v == nil {
957+
return map[string]string{}, nil
958+
}
959+
m := make(map[string]string)
960+
for k, val := range v.(map[string]interface{}) {
961+
m[k] = val.(string)
962+
}
963+
return m, nil
964+
}

google/services/redis/resource_redis_cluster_generated_test.go

+3
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ resource "google_redis_cluster" "cluster-ha" {
6969
node_type = "REDIS_SHARED_CORE_NANO"
7070
transit_encryption_mode = "TRANSIT_ENCRYPTION_MODE_DISABLED"
7171
authorization_mode = "AUTH_MODE_DISABLED"
72+
redis_configs = {
73+
maxmemory-policy = "volatile-ttl"
74+
}
7275
depends_on = [
7376
google_network_connectivity_service_connection_policy.default
7477
]

website/docs/r/redis_cluster.html.markdown

+9
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ resource "google_redis_cluster" "cluster-ha" {
4848
node_type = "REDIS_SHARED_CORE_NANO"
4949
transit_encryption_mode = "TRANSIT_ENCRYPTION_MODE_DISABLED"
5050
authorization_mode = "AUTH_MODE_DISABLED"
51+
redis_configs = {
52+
maxmemory-policy = "volatile-ttl"
53+
}
5154
depends_on = [
5255
google_network_connectivity_service_connection_policy.default
5356
]
@@ -137,6 +140,12 @@ The following arguments are supported:
137140
(Optional)
138141
Optional. The number of replica nodes per shard.
139142

143+
* `redis_configs` -
144+
(Optional)
145+
Configure Redis Cluster behavior using a subset of native Redis configuration parameters.
146+
Please check Memorystore documentation for the list of supported parameters:
147+
https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations
148+
140149
* `region` -
141150
(Optional)
142151
The name of the region of the Redis cluster.

0 commit comments

Comments
 (0)