Skip to content

Commit 14fb615

Browse files
Merge pull request #654 from RedisLabs/feat/OPCR-33-AA-database-versioning-support
OPCR-33 aa database versioning support
2 parents cb8ff23 + da883ac commit 14fb615

File tree

5 files changed

+72
-59
lines changed

5 files changed

+72
-59
lines changed

go.mod

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.23.0
55
toolchain go1.24.1
66

77
require (
8-
github.com/RedisLabs/rediscloud-go-api v0.34.0
8+
github.com/RedisLabs/rediscloud-go-api v0.34.2
99
github.com/bflad/tfproviderlint v0.31.0
1010
github.com/hashicorp/go-cty v1.5.0
1111
github.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0
@@ -55,13 +55,13 @@ require (
5555
github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect
5656
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
5757
github.com/zclconf/go-cty v1.16.2 // indirect
58-
golang.org/x/crypto v0.38.0 // indirect
59-
golang.org/x/mod v0.24.0 // indirect
60-
golang.org/x/net v0.39.0 // indirect
61-
golang.org/x/sync v0.14.0 // indirect
62-
golang.org/x/sys v0.33.0 // indirect
63-
golang.org/x/text v0.25.0 // indirect
64-
golang.org/x/tools v0.30.0 // indirect
58+
golang.org/x/crypto v0.41.0 // indirect
59+
golang.org/x/mod v0.27.0 // indirect
60+
golang.org/x/net v0.43.0 // indirect
61+
golang.org/x/sync v0.16.0 // indirect
62+
golang.org/x/sys v0.35.0 // indirect
63+
golang.org/x/text v0.28.0 // indirect
64+
golang.org/x/tools v0.36.0 // indirect
6565
google.golang.org/appengine v1.6.8 // indirect
6666
google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a // indirect
6767
google.golang.org/grpc v1.72.1 // indirect

go.sum

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo
44
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
55
github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw=
66
github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
7-
github.com/RedisLabs/rediscloud-go-api v0.34.0 h1:TjiABMGCa7SXfwdlqAEj53GX0ipC/b6MOagQc7wIo7g=
8-
github.com/RedisLabs/rediscloud-go-api v0.34.0/go.mod h1:3/oVb71rv2OstFRYEc65QCIbfwnJTgZeQhtPCcdHook=
7+
github.com/RedisLabs/rediscloud-go-api v0.34.2 h1:K31RyQ0Soow07k9oBdxMAyY45sS+yGcZYuCY0c3gqLU=
8+
github.com/RedisLabs/rediscloud-go-api v0.34.2/go.mod h1:SdjSIrfqR653L+K4Bcpr1HIoiCSluDGIKak+qBelB/M=
99
github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE=
1010
github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
1111
github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec=
@@ -175,23 +175,23 @@ go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h
175175
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
176176
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
177177
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
178-
golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
179-
golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
178+
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
179+
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
180180
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
181181
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
182-
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
183-
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
182+
golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
183+
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
184184
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
185185
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
186186
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
187187
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
188-
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
189-
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
188+
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
189+
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
190190
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
191191
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
192192
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
193-
golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
194-
golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
193+
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
194+
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
195195
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
196196
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
197197
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -205,24 +205,24 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
205205
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
206206
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
207207
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
208-
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
209-
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
208+
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
209+
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
210210
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
211211
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
212-
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
213-
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
212+
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
213+
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
214214
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
215215
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
216216
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
217217
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
218-
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
219-
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
218+
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
219+
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
220220
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
221221
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
222222
golang.org/x/tools v0.0.0-20200214201135-548b770e2dfa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
223223
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
224-
golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY=
225-
golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY=
224+
golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
225+
golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
226226
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
227227
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
228228
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

provider/rediscloud_active_active_database_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ func TestAccResourceRedisCloudActiveActiveDatabase_CRUDI(t *testing.T) {
144144
resource.TestCheckResourceAttr(databaseResourceName, "global_alert.#", "1"),
145145
resource.TestCheckResourceAttr(databaseResourceName, "global_alert.0.name", "dataset-size"),
146146
resource.TestCheckResourceAttr(databaseResourceName, "global_alert.0.value", "60"),
147+
resource.TestCheckResourceAttr(databaseResourceName, "redis_version", "7.2"),
147148

148149
// Changes are ignored after creation
149150
resource.TestCheckResourceAttr(databaseResourceName, "global_modules.#", "1"),
@@ -161,7 +162,7 @@ func TestAccResourceRedisCloudActiveActiveDatabase_CRUDI(t *testing.T) {
161162
// Test datasource
162163
resource.TestCheckResourceAttr(datasourceName, "dataset_size_in_gb", "1"),
163164
resource.TestCheckResourceAttr(datasourceName, "support_oss_cluster_api", "true"),
164-
resource.TestCheckResourceAttr(datasourceName, "redis_version", "7.4"),
165+
resource.TestCheckResourceAttr(datasourceName, "redis_version", "7.2"),
165166
resource.TestCheckResourceAttr(datasourceName, "external_endpoint_for_oss_cluster_api", "true"),
166167
),
167168
},
@@ -300,6 +301,7 @@ resource "rediscloud_active_active_subscription_database" "example" {
300301
support_oss_cluster_api = false
301302
external_endpoint_for_oss_cluster_api = false
302303
enable_tls = false
304+
redis_version = "7.2"
303305
304306
global_data_persistence = "none"
305307
global_password = "%s"
@@ -416,7 +418,6 @@ resource "rediscloud_active_active_subscription" "example" {
416418
name = "%s"
417419
payment_method_id = data.rediscloud_payment_method.card.id
418420
cloud_provider = "AWS"
419-
redis_version = "latest"
420421
421422
creation_plan {
422423
dataset_size_in_gb = 1

provider/resource_rediscloud_active_active_database.go

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package provider
22

33
import (
44
"context"
5+
"github.com/RedisLabs/terraform-provider-rediscloud/provider/utils"
56
"log"
67
"regexp"
78
"strings"
@@ -97,6 +98,13 @@ func resourceRedisCloudActiveActiveDatabase() *schema.Resource {
9798
Computed: true,
9899
ExactlyOneOf: []string{"memory_limit_in_gb", "dataset_size_in_gb"},
99100
},
101+
"redis_version": {
102+
Description: "Defines the Redis database version. If omitted, the Redis version will be set to the default version",
103+
Type: schema.TypeString,
104+
Optional: true,
105+
Computed: true,
106+
ForceNew: true,
107+
},
100108
"support_oss_cluster_api": {
101109
Description: "Support Redis open-source (OSS) Cluster API",
102110
Type: schema.TypeBool,
@@ -339,11 +347,7 @@ func resourceRedisCloudActiveActiveDatabaseCreate(ctx context.Context, d *schema
339347
name := d.Get("name").(string)
340348
supportOSSClusterAPI := d.Get("support_oss_cluster_api").(bool)
341349
useExternalEndpointForOSSClusterAPI := d.Get("external_endpoint_for_oss_cluster_api").(bool)
342-
dataEviction := d.Get("data_eviction").(string)
343-
globalDataPersistence := d.Get("global_data_persistence").(string)
344-
globalPassword := d.Get("global_password").(string)
345350
globalSourceIp := setToStringSlice(d.Get("global_source_ips").(*schema.Set))
346-
respVersion := d.Get("global_resp_version").(string)
347351

348352
createAlerts := make([]*databases.Alert, 0)
349353
alerts := d.Get("global_alert").(*schema.Set)
@@ -399,33 +403,37 @@ func resourceRedisCloudActiveActiveDatabaseCreate(ctx context.Context, d *schema
399403
LocalThroughputMeasurement: localThroughputs,
400404
}
401405

402-
if dataEviction != "" {
403-
createDatabase.DataEvictionPolicy = redis.String(dataEviction)
404-
}
406+
utils.SetStringIfNotEmpty(d, "data_eviction", func(s *string) {
407+
createDatabase.DataEvictionPolicy = s
408+
})
405409

406-
if globalDataPersistence != "" {
407-
createDatabase.GlobalDataPersistence = redis.String(globalDataPersistence)
408-
}
410+
utils.SetStringIfNotEmpty(d, "global_data_persistence", func(s *string) {
411+
createDatabase.GlobalDataPersistence = s
412+
})
409413

410-
if globalPassword != "" {
411-
createDatabase.GlobalPassword = redis.String(globalPassword)
412-
}
414+
utils.SetStringIfNotEmpty(d, "global_password", func(s *string) {
415+
createDatabase.GlobalPassword = s
416+
})
413417

414-
if v, ok := d.GetOk("dataset_size_in_gb"); ok {
415-
createDatabase.DatasetSizeInGB = redis.Float64(v.(float64))
416-
}
418+
utils.SetFloat64(d, "dataset_size_in_gb", func(f *float64) {
419+
createDatabase.DatasetSizeInGB = f
420+
})
417421

418-
if v, ok := d.GetOk("memory_limit_in_gb"); ok {
419-
createDatabase.MemoryLimitInGB = redis.Float64(v.(float64))
420-
}
422+
utils.SetFloat64(d, "memory_limit_in_gb", func(f *float64) {
423+
createDatabase.MemoryLimitInGB = f
424+
})
421425

422-
if v, ok := d.GetOk("port"); ok {
423-
createDatabase.PortNumber = redis.Int(v.(int))
424-
}
426+
utils.SetIntIfPositive(d, "port", func(i *int) {
427+
createDatabase.PortNumber = i
428+
})
425429

426-
if respVersion != "" {
427-
createDatabase.RespVersion = redis.String(respVersion)
428-
}
430+
utils.SetStringIfNotEmpty(d, "global_resp_version", func(s *string) {
431+
createDatabase.RespVersion = s
432+
})
433+
434+
utils.SetStringIfNotEmpty(d, "redis_version", func(s *string) {
435+
createDatabase.RedisVersion = s
436+
})
429437

430438
// Confirm Subscription Active status before creating database
431439
err = waitForSubscriptionToBeActive(ctx, subId, api)
@@ -591,6 +599,10 @@ func resourceRedisCloudActiveActiveDatabaseRead(ctx context.Context, d *schema.R
591599
return diag.FromErr(err)
592600
}
593601

602+
if err := d.Set("redis_version", redis.StringValue(db.RedisVersion)); err != nil {
603+
return diag.FromErr(err)
604+
}
605+
594606
tlsAuthEnabled := *db.CrdbDatabases[0].Security.TLSClientAuthentication
595607
if err := applyCertificateHints(tlsAuthEnabled, d); err != nil {
596608
return diag.FromErr(err)

provider/resource_rediscloud_pro_database.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,12 @@ func resourceRedisCloudProDatabase() *schema.Resource {
9494
Computed: true,
9595
ExactlyOneOf: []string{"memory_limit_in_gb", "dataset_size_in_gb"},
9696
},
97+
"redis_version": {
98+
Description: "Defines the Redis database version. If omitted, the Redis version will be set to the default version",
99+
Type: schema.TypeString,
100+
Optional: true,
101+
Computed: true,
102+
},
97103
"support_oss_cluster_api": {
98104
Description: "Support Redis open-source (OSS) Cluster API",
99105
Type: schema.TypeBool,
@@ -237,12 +243,6 @@ func resourceRedisCloudProDatabase() *schema.Resource {
237243
return
238244
},
239245
},
240-
"redis_version": {
241-
Description: "Defines the Redis database version. If omitted, the Redis version will be set to the default version",
242-
Type: schema.TypeString,
243-
Optional: true,
244-
Computed: true,
245-
},
246246
"modules": {
247247
Description: "Modules to be provisioned in the database",
248248
Type: schema.TypeSet,

0 commit comments

Comments
 (0)