Skip to content

Commit 5bcea07

Browse files
Add CMEK support for Redis cluster (GoogleCloudPlatform#12999) (#21428)
[upstream:57616ae8d7af81cdd4857b86e6e50797a3420674] Signed-off-by: Modular Magician <[email protected]>
1 parent 7be5d6e commit 5bcea07

6 files changed

+265
-95
lines changed

.changelog/12999.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
redis: added `kms_key` field to `google_redis_cluster` resource
3+
```

google/services/redis/resource_redis_cluster.go

+32
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,11 @@ If the value if set to true, any delete cluster operation will fail.
202202
Default value is true.`,
203203
Default: true,
204204
},
205+
"kms_key": {
206+
Type: schema.TypeString,
207+
Optional: true,
208+
Description: `The KMS key used to encrypt the at-rest data of the cluster.`,
209+
},
205210
"maintenance_policy": {
206211
Type: schema.TypeList,
207212
Optional: true,
@@ -722,6 +727,12 @@ func resourceRedisClusterCreate(d *schema.ResourceData, meta interface{}) error
722727
} else if v, ok := d.GetOkExists("cross_cluster_replication_config"); !tpgresource.IsEmptyValue(reflect.ValueOf(crossClusterReplicationConfigProp)) && (ok || !reflect.DeepEqual(v, crossClusterReplicationConfigProp)) {
723728
obj["crossClusterReplicationConfig"] = crossClusterReplicationConfigProp
724729
}
730+
kmsKeyProp, err := expandRedisClusterKmsKey(d.Get("kms_key"), d, config)
731+
if err != nil {
732+
return err
733+
} else if v, ok := d.GetOkExists("kms_key"); !tpgresource.IsEmptyValue(reflect.ValueOf(kmsKeyProp)) && (ok || !reflect.DeepEqual(v, kmsKeyProp)) {
734+
obj["kmsKey"] = kmsKeyProp
735+
}
725736

726737
url, err := tpgresource.ReplaceVars(d, config, "{{RedisBasePath}}projects/{{project}}/locations/{{region}}/clusters?clusterId={{name}}")
727738
if err != nil {
@@ -892,6 +903,9 @@ func resourceRedisClusterRead(d *schema.ResourceData, meta interface{}) error {
892903
if err := d.Set("psc_service_attachments", flattenRedisClusterPscServiceAttachments(res["pscServiceAttachments"], d, config)); err != nil {
893904
return fmt.Errorf("Error reading Cluster: %s", err)
894905
}
906+
if err := d.Set("kms_key", flattenRedisClusterKmsKey(res["kmsKey"], d, config)); err != nil {
907+
return fmt.Errorf("Error reading Cluster: %s", err)
908+
}
895909

896910
return nil
897911
}
@@ -960,6 +974,12 @@ func resourceRedisClusterUpdate(d *schema.ResourceData, meta interface{}) error
960974
} else if v, ok := d.GetOkExists("cross_cluster_replication_config"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, crossClusterReplicationConfigProp)) {
961975
obj["crossClusterReplicationConfig"] = crossClusterReplicationConfigProp
962976
}
977+
kmsKeyProp, err := expandRedisClusterKmsKey(d.Get("kms_key"), d, config)
978+
if err != nil {
979+
return err
980+
} else if v, ok := d.GetOkExists("kms_key"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, kmsKeyProp)) {
981+
obj["kmsKey"] = kmsKeyProp
982+
}
963983

964984
url, err := tpgresource.ReplaceVars(d, config, "{{RedisBasePath}}projects/{{project}}/locations/{{region}}/clusters/{{name}}")
965985
if err != nil {
@@ -1001,6 +1021,10 @@ func resourceRedisClusterUpdate(d *schema.ResourceData, meta interface{}) error
10011021
if d.HasChange("cross_cluster_replication_config") {
10021022
updateMask = append(updateMask, "crossClusterReplicationConfig")
10031023
}
1024+
1025+
if d.HasChange("kms_key") {
1026+
updateMask = append(updateMask, "kmsKey")
1027+
}
10041028
// updateMask is a URL parameter but not present in the schema, so ReplaceVars
10051029
// won't set it
10061030
url, err = transport_tpg.AddQueryParams(url, map[string]string{"updateMask": strings.Join(updateMask, ",")})
@@ -1791,6 +1815,10 @@ func flattenRedisClusterPscServiceAttachmentsConnectionType(v interface{}, d *sc
17911815
return v
17921816
}
17931817

1818+
func flattenRedisClusterKmsKey(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1819+
return v
1820+
}
1821+
17941822
func expandRedisClusterAuthorizationMode(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
17951823
return v, nil
17961824
}
@@ -2348,3 +2376,7 @@ func expandRedisClusterCrossClusterReplicationConfigMembershipSecondaryClustersU
23482376
func expandRedisClusterCrossClusterReplicationConfigUpdateTime(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
23492377
return v, nil
23502378
}
2379+
2380+
func expandRedisClusterKmsKey(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
2381+
return v, nil
2382+
}

google/services/redis/resource_redis_cluster_generated_meta.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ fields:
2121
- field: 'discovery_endpoints.address'
2222
- field: 'discovery_endpoints.port'
2323
- field: 'discovery_endpoints.psc_config.network'
24+
- field: 'kms_key'
2425
- field: 'maintenance_policy.create_time'
2526
- field: 'maintenance_policy.update_time'
2627
- field: 'maintenance_policy.weekly_maintenance_window.day'

0 commit comments

Comments
 (0)