Skip to content

Commit b7daba4

Browse files
committed
feat: moving enable default user to a per region basis
1 parent 2b7362e commit b7daba4

16 files changed

+249
-166
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,4 @@ require (
7171
)
7272

7373
// for local development, uncomment this
74-
// replace github.com/RedisLabs/rediscloud-go-api => ../rediscloud-go-api
74+
replace github.com/RedisLabs/rediscloud-go-api => ../rediscloud-go-api
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
locals {
2+
rediscloud_subscription_name = "%s"
3+
}
4+
5+
data "rediscloud_payment_method" "card" {
6+
card_type = "Visa"
7+
last_four_numbers = "5556"
8+
}
9+
10+
resource "rediscloud_active_active_subscription" "example" {
11+
name = local.rediscloud_subscription_name
12+
payment_method_id = data.rediscloud_payment_method.card.id
13+
cloud_provider = "AWS"
14+
15+
creation_plan {
16+
memory_limit_in_gb = 1
17+
modules = ["RedisJSON"]
18+
quantity = 1
19+
region {
20+
region = "us-east-1"
21+
networking_deployment_cidr = "192.168.0.0/24"
22+
write_operations_per_second = 1000
23+
read_operations_per_second = 1000
24+
}
25+
region {
26+
region = "us-east-2"
27+
networking_deployment_cidr = "10.0.1.0/24"
28+
write_operations_per_second = 1000
29+
read_operations_per_second = 1000
30+
}
31+
}
32+
33+
maintenance_windows {
34+
mode = "manual"
35+
window {
36+
start_hour = 22
37+
duration_in_hours = 8
38+
days = ["Monday", "Thursday"]
39+
}
40+
window {
41+
start_hour = 12
42+
duration_in_hours = 6
43+
days = ["Friday", "Saturday", "Sunday"]
44+
}
45+
}
46+
}
47+
48+
resource "rediscloud_active_active_subscription_database" "example" {
49+
subscription_id = rediscloud_active_active_subscription.example.id
50+
name = local.rediscloud_subscription_name
51+
dataset_size_in_gb = 1
52+
global_data_persistence = "aof-every-1-second"
53+
global_password = "some-random-pass-2"
54+
global_source_ips = ["192.168.0.0/16"]
55+
global_alert {
56+
name = "dataset-size"
57+
value = 40
58+
}
59+
60+
global_modules = ["RedisJSON"]
61+
62+
63+
64+
override_region {
65+
name = "us-east-2"
66+
enable_default_user = true
67+
override_global_source_ips = ["192.10.0.0/16"]
68+
}
69+
70+
override_region {
71+
name = "us-east-1"
72+
override_global_data_persistence = "none"
73+
override_global_password = "region-specific-password"
74+
override_global_alert {
75+
name = "dataset-size"
76+
value = 60
77+
}
78+
}
79+
80+
tags = {
81+
"environment" = "production"
82+
"cost_center" = "0700"
83+
}
84+
}
85+
86+
87+
data "rediscloud_active_active_subscription" "example" {
88+
name = rediscloud_active_active_subscription.example.name
89+
}
90+
91+
data "rediscloud_active_active_subscription_regions" "example" {
92+
subscription_name = rediscloud_active_active_subscription.example.name
93+
}
94+
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
locals {
2+
rediscloud_subscription_name = "%s"
3+
rediscloud_cloud_provider_name = "%s"
4+
}
5+
6+
data "rediscloud_payment_method" "card" {
7+
card_type = "Visa"
8+
last_four_numbers = "5556"
9+
}
10+
11+
resource "rediscloud_active_active_subscription" "example" {
12+
name = local.rediscloud_subscription_name
13+
payment_method_id = data.rediscloud_payment_method.card.id
14+
cloud_provider = local.rediscloud_cloud_provider_name
15+
16+
maintenance_windows {
17+
mode = "automatic"
18+
}
19+
}
20+
21+
data "rediscloud_active_active_subscription" "example" {
22+
name = rediscloud_active_active_subscription.example.name
23+
}
24+
25+
resource "rediscloud_active_active_subscription_database" "example" {
26+
subscription_id = rediscloud_active_active_subscription.example.id
27+
name = local.rediscloud_subscription_name
28+
dataset_size_in_gb = 1
29+
global_data_persistence = "aof-every-1-second"
30+
global_password = "some-random-pass-2"
31+
global_source_ips = ["192.168.0.0/16"]
32+
global_alert {
33+
name = "dataset-size"
34+
value = 40
35+
}
36+
37+
global_modules = ["RedisJSON"]
38+
39+
40+
41+
override_region {
42+
name = "us-east-2"
43+
enable_default_user = false
44+
override_global_source_ips = ["192.10.0.0/16"]
45+
}
46+
47+
override_region {
48+
name = "us-east-1"
49+
override_global_data_persistence = "none"
50+
override_global_password = "region-specific-password"
51+
override_global_alert {
52+
name = "dataset-size"
53+
value = 60
54+
}
55+
}
56+
57+
tags = {
58+
"environment" = "production"
59+
"cost_center" = "0700"
60+
}
61+
}

provider/datasource_rediscloud_active_active_database.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,6 @@ func dataSourceRedisCloudActiveActiveDatabase() *schema.Resource {
9898
Type: schema.TypeString,
9999
},
100100
},
101-
"enable_default_user": {
102-
Description: "When 'true', enables connecting to the database with the 'default' user. Default: 'true'",
103-
Type: schema.TypeBool,
104-
Computed: true,
105-
},
106101
"latest_backup_statuses": {
107102
Description: "Details about the last backups that took place across each region for this active-active database",
108103
Computed: true,
@@ -345,12 +340,6 @@ func dataSourceRedisCloudActiveActiveDatabaseRead(ctx context.Context, d *schema
345340
return diag.FromErr(err)
346341
}
347342

348-
if db.Security != nil {
349-
if err := d.Set("enable_default_user", redis.BoolValue(db.Security.EnableDefaultUser)); err != nil {
350-
return diag.FromErr(err)
351-
}
352-
}
353-
354343
var parsedLatestBackupStatuses []map[string]interface{}
355344
for _, regionDb := range db.CrdbDatabases {
356345
region := redis.StringValue(regionDb.Region)

provider/datasource_rediscloud_pro_database_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func getRedisProDbDatasourceConfig(t *testing.T, password string) string {
7272
testCloudAccountName := os.Getenv("AWS_TEST_CLOUD_ACCOUNT_NAME")
7373
subscriptionName := acctest.RandomWithPrefix(testResourcePrefix)
7474

75-
content, err := os.ReadFile("./testdata/testAccDatasourceRedisCloudProDatabase.tf")
75+
content, err := os.ReadFile("./pro/testdata/testAccDatasourceRedisCloudProDatabase.tf")
7676
if err != nil {
7777
t.Fatalf("failed to read file: %v", err)
7878
}

provider/rediscloud_active_active_subscription_test.go

Lines changed: 30 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ import (
44
"context"
55
"flag"
66
"fmt"
7-
client2 "github.com/RedisLabs/terraform-provider-rediscloud/provider/client"
7+
"os"
88
"regexp"
99
"strconv"
1010
"testing"
1111

1212
"github.com/RedisLabs/rediscloud-go-api/redis"
13+
client2 "github.com/RedisLabs/terraform-provider-rediscloud/provider/client"
1314
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
1415
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1516
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
@@ -40,7 +41,7 @@ func TestAccResourceRedisCloudActiveActiveSubscription_CRUDI(t *testing.T) {
4041
CheckDestroy: testAccCheckActiveActiveSubscriptionDestroy,
4142
Steps: []resource.TestStep{
4243
{
43-
Config: fmt.Sprintf(testAccResourceRedisCloudActiveActiveSubscription, name, name),
44+
Config: testAccResourceRedisCloudActiveActiveSubscription(t, name),
4445
Check: resource.ComposeAggregateTestCheckFunc(
4546
// Test the resource
4647
resource.TestCheckResourceAttr(resourceName, "name", name),
@@ -175,11 +176,14 @@ func TestAccResourceRedisCloudActiveActiveSubscription_CRUDI(t *testing.T) {
175176
resource.TestCheckResourceAttr(datasourceRegionName, "regions.1.region", "us-east-2"),
176177
resource.TestCheckResourceAttr(datasourceRegionName, "regions.1.networking_deployment_cidr", "10.0.1.0/24"),
177178
resource.TestCheckResourceAttrSet(datasourceRegionName, "regions.1.vpc_id"),
179+
180+
// checks enabling default user is true
181+
//resource.TestCheckResourceAttr(resourceName, "regions.1.enable_default_user", "true"),
178182
),
179183
},
180184
{
181185
// Checks if the changes in the creation plan are ignored.
182-
Config: fmt.Sprintf(testAccResourceRedisCloudActiveActiveSubscriptionNoCreationPlan, name, "AWS"),
186+
Config: testAccResourceRedisCloudActiveActiveSubscriptionUpdate(t, name, "AWS"),
183187
Check: resource.ComposeAggregateTestCheckFunc(
184188
resource.TestCheckResourceAttr(resourceName, "name", name),
185189
resource.TestCheckResourceAttr(resourceName, "cloud_provider", "AWS"),
@@ -194,6 +198,9 @@ func TestAccResourceRedisCloudActiveActiveSubscription_CRUDI(t *testing.T) {
194198
resource.TestCheckResourceAttr(resourceName, "creation_plan.0.region.1.write_operations_per_second", "1000"),
195199
resource.TestCheckResourceAttr(resourceName, "creation_plan.0.region.1.read_operations_per_second", "1000"),
196200

201+
// also checks user has removed default user
202+
//resource.TestCheckResourceAttr(resourceName, "regions.1.enable_default_user", "false"),
203+
197204
// maintenance windows spec is omitted so should default back to automatic
198205
resource.TestCheckResourceAttr(resourceName, "maintenance_windows.0.mode", "automatic"),
199206
resource.TestCheckResourceAttr(resourceName, "maintenance_windows.0.window.#", "0"),
@@ -343,96 +350,6 @@ func testAccCheckActiveActiveSubscriptionDestroy(s *terraform.State) error {
343350
return nil
344351
}
345352

346-
// TF config for provisioning a new subscription.
347-
const testAccResourceRedisCloudActiveActiveSubscription = `
348-
data "rediscloud_payment_method" "card" {
349-
card_type = "Visa"
350-
last_four_numbers = "5556"
351-
}
352-
353-
resource "rediscloud_active_active_subscription" "example" {
354-
name = "%s"
355-
payment_method_id = data.rediscloud_payment_method.card.id
356-
cloud_provider = "AWS"
357-
358-
creation_plan {
359-
memory_limit_in_gb = 1
360-
modules = ["RedisJSON"]
361-
quantity = 1
362-
region {
363-
region = "us-east-1"
364-
networking_deployment_cidr = "192.168.0.0/24"
365-
write_operations_per_second = 1000
366-
read_operations_per_second = 1000
367-
}
368-
region {
369-
region = "us-east-2"
370-
networking_deployment_cidr = "10.0.1.0/24"
371-
write_operations_per_second = 1000
372-
read_operations_per_second = 1000
373-
}
374-
}
375-
376-
maintenance_windows {
377-
mode = "manual"
378-
window {
379-
start_hour = 22
380-
duration_in_hours = 8
381-
days = ["Monday", "Thursday"]
382-
}
383-
window {
384-
start_hour = 12
385-
duration_in_hours = 6
386-
days = ["Friday", "Saturday", "Sunday"]
387-
}
388-
}
389-
}
390-
391-
resource "rediscloud_active_active_subscription_database" "example" {
392-
subscription_id = rediscloud_active_active_subscription.example.id
393-
name = "%s"
394-
dataset_size_in_gb = 1
395-
global_data_persistence = "aof-every-1-second"
396-
global_password = "some-random-pass-2"
397-
global_source_ips = ["192.168.0.0/16"]
398-
global_alert {
399-
name = "dataset-size"
400-
value = 40
401-
}
402-
403-
global_modules = ["RedisJSON"]
404-
405-
override_region {
406-
name = "us-east-2"
407-
override_global_source_ips = ["192.10.0.0/16"]
408-
}
409-
410-
override_region {
411-
name = "us-east-1"
412-
override_global_data_persistence = "none"
413-
override_global_password = "region-specific-password"
414-
override_global_alert {
415-
name = "dataset-size"
416-
value = 60
417-
}
418-
}
419-
420-
tags = {
421-
"environment" = "production"
422-
"cost_center" = "0700"
423-
}
424-
}
425-
426-
427-
data "rediscloud_active_active_subscription" "example" {
428-
name = rediscloud_active_active_subscription.example.name
429-
}
430-
431-
data "rediscloud_active_active_subscription_regions" "example" {
432-
subscription_name = rediscloud_active_active_subscription.example.name
433-
}
434-
`
435-
436353
const testAccResourceRedisCloudActiveActiveSubscriptionNoCreationPlan = `
437354
438355
data "rediscloud_payment_method" "card" {
@@ -536,3 +453,23 @@ resource "rediscloud_active_active_subscription" "example" {
536453
}
537454
}
538455
`
456+
457+
func testAccResourceRedisCloudActiveActiveSubscription(t *testing.T, subscriptionName string) string {
458+
459+
content, err := os.ReadFile("./activeactive/testdata//testAccResourceRedisCloudActiveActiveSubscription.tf")
460+
if err != nil {
461+
t.Fatalf("failed to read file: %v", err)
462+
}
463+
464+
return fmt.Sprintf(string(content), subscriptionName)
465+
}
466+
467+
func testAccResourceRedisCloudActiveActiveSubscriptionUpdate(t *testing.T, subscriptionName string, cloudProvider string) string {
468+
469+
content, err := os.ReadFile("./activeactive/testdata/testAccResourceRedisCloudActiveActiveSubscriptionUpdate.tf")
470+
if err != nil {
471+
t.Fatalf("failed to read file: %v", err)
472+
}
473+
474+
return fmt.Sprintf(string(content), subscriptionName, cloudProvider)
475+
}

0 commit comments

Comments
 (0)