@@ -23,7 +23,7 @@ func TestAccRedisCluster_createClusterWithNodeType(t *testing.T) {
23
23
Steps: []resource.TestStep{
24
24
{
25
25
// create cluster with replica count 1
26
- Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 1, shardCount: 3, preventDestroy: true, nodeType: "REDIS_STANDARD_SMALL"}),
26
+ Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 1, shardCount: 3, preventDestroy: true, nodeType: "REDIS_STANDARD_SMALL", zoneDistributionMode: "MULTI_ZONE" }),
27
27
},
28
28
{
29
29
ResourceName: "google_redis_cluster.test",
@@ -33,12 +33,42 @@ func TestAccRedisCluster_createClusterWithNodeType(t *testing.T) {
33
33
},
34
34
{
35
35
// clean up the resource
36
- Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 0, shardCount: 3, preventDestroy: false, nodeType: "REDIS_STANDARD_SMALL"}),
36
+ Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 0, shardCount: 3, preventDestroy: false, nodeType: "REDIS_STANDARD_SMALL", zoneDistributionMode: "MULTI_ZONE" }),
37
37
},
38
38
},
39
39
})
40
40
}
41
41
42
+
43
+ // Validate zone distribution for the cluster.
44
+ func TestAccRedisCluster_createClusterWithZoneDistribution(t *testing.T) {
45
+ t.Parallel()
46
+
47
+ name := fmt.Sprintf("tf-test-%d", acctest.RandInt(t))
48
+
49
+ acctest.VcrTest(t, resource.TestCase{
50
+ PreCheck: func() { acctest.AccTestPreCheck(t) },
51
+ ProtoV5ProviderFactories: acctest.ProtoV5ProviderBetaFactories(t),
52
+ CheckDestroy: testAccCheckRedisClusterDestroyProducer(t),
53
+ Steps: []resource.TestStep{
54
+ {
55
+ // create cluster with replica count 1
56
+ Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 0, shardCount: 3, preventDestroy: false, zoneDistributionMode: "SINGLE_ZONE", zone: "us-central1-b"}),
57
+ },
58
+ {
59
+ ResourceName: "google_redis_cluster.test",
60
+ ImportState: true,
61
+ ImportStateVerify: true,
62
+ ImportStateVerifyIgnore: []string{"psc_configs"},
63
+ },
64
+ {
65
+ // clean up the resource
66
+ Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 0, shardCount: 3, preventDestroy: false, zoneDistributionMode: "SINGLE_ZONE", zone: "us-central1-b"}),
67
+ },
68
+ },
69
+ })
70
+ }
71
+
42
72
// Validate that replica count is updated for the cluster
43
73
func TestAccRedisCluster_updateReplicaCount(t *testing.T) {
44
74
t.Parallel()
@@ -52,7 +82,7 @@ func TestAccRedisCluster_updateReplicaCount(t *testing.T) {
52
82
Steps: []resource.TestStep{
53
83
{
54
84
// create cluster with replica count 1
55
- Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 1, shardCount: 3, preventDestroy: true}),
85
+ Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 1, shardCount: 3, preventDestroy: true, zoneDistributionMode: "MULTI_ZONE" }),
56
86
},
57
87
{
58
88
ResourceName: "google_redis_cluster.test",
@@ -62,7 +92,7 @@ func TestAccRedisCluster_updateReplicaCount(t *testing.T) {
62
92
},
63
93
{
64
94
// update replica count to 2
65
- Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 2, shardCount: 3, preventDestroy: true}),
95
+ Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 2, shardCount: 3, preventDestroy: true, zoneDistributionMode: "MULTI_ZONE" }),
66
96
},
67
97
{
68
98
ResourceName: "google_redis_cluster.test",
@@ -72,11 +102,11 @@ func TestAccRedisCluster_updateReplicaCount(t *testing.T) {
72
102
},
73
103
{
74
104
// clean up the resource
75
- Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 1, shardCount: 3, preventDestroy: false}),
105
+ Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 1, shardCount: 3, preventDestroy: false, zoneDistributionMode: "MULTI_ZONE" }),
76
106
},
77
107
{
78
108
// update replica count to 0
79
- Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 0, shardCount: 3, preventDestroy: true}),
109
+ Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 0, shardCount: 3, preventDestroy: true, zoneDistributionMode: "MULTI_ZONE" }),
80
110
},
81
111
{
82
112
ResourceName: "google_redis_cluster.test",
@@ -86,7 +116,7 @@ func TestAccRedisCluster_updateReplicaCount(t *testing.T) {
86
116
},
87
117
{
88
118
// clean up the resource
89
- Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 0, shardCount: 3, preventDestroy: false}),
119
+ Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 0, shardCount: 3, preventDestroy: false, zoneDistributionMode: "MULTI_ZONE" }),
90
120
},
91
121
},
92
122
})
@@ -105,7 +135,7 @@ func TestAccRedisCluster_updateShardCount(t *testing.T) {
105
135
Steps: []resource.TestStep{
106
136
{
107
137
// create cluster with shard count 3
108
- Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 1, shardCount: 3, preventDestroy: true}),
138
+ Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 1, shardCount: 3, preventDestroy: true, zoneDistributionMode: "MULTI_ZONE" }),
109
139
},
110
140
{
111
141
ResourceName: "google_redis_cluster.test",
@@ -115,7 +145,7 @@ func TestAccRedisCluster_updateShardCount(t *testing.T) {
115
145
},
116
146
{
117
147
// update shard count to 5
118
- Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 1, shardCount: 5, preventDestroy: true}),
148
+ Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 1, shardCount: 5, preventDestroy: true, zoneDistributionMode: "MULTI_ZONE" }),
119
149
},
120
150
{
121
151
ResourceName: "google_redis_cluster.test",
@@ -125,7 +155,7 @@ func TestAccRedisCluster_updateShardCount(t *testing.T) {
125
155
},
126
156
{
127
157
// clean up the resource
128
- Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 1, shardCount: 5, preventDestroy: false}),
158
+ Config: createOrUpdateRedisCluster(&ClusterParams{name: name, replicaCount: 1, shardCount: 5, preventDestroy: false, zoneDistributionMode: "MULTI_ZONE" }),
129
159
},
130
160
},
131
161
})
@@ -147,6 +177,7 @@ func TestAccRedisCluster_updateRedisConfigs(t *testing.T) {
147
177
Config: createOrUpdateRedisCluster(&ClusterParams{
148
178
name: name,
149
179
shardCount: 3,
180
+ zoneDistributionMode: "MULTI_ZONE",
150
181
redisConfigs: map[string]string{
151
182
"maxmemory-policy": "volatile-ttl",
152
183
}}),
@@ -162,6 +193,7 @@ func TestAccRedisCluster_updateRedisConfigs(t *testing.T) {
162
193
Config: createOrUpdateRedisCluster(&ClusterParams{
163
194
name: name,
164
195
shardCount: 3,
196
+ zoneDistributionMode: "MULTI_ZONE",
165
197
redisConfigs: map[string]string{
166
198
"maxmemory-policy": "allkeys-lru",
167
199
"maxmemory-clients": "90%",
@@ -175,20 +207,22 @@ func TestAccRedisCluster_updateRedisConfigs(t *testing.T) {
175
207
},
176
208
{
177
209
// remove all redis configs
178
- Config: createOrUpdateRedisCluster(&ClusterParams{name: name, shardCount: 3}),
210
+ Config: createOrUpdateRedisCluster(&ClusterParams{name: name, shardCount: 3, zoneDistributionMode: "MULTI_ZONE" }),
179
211
},
180
212
181
213
},
182
214
})
183
215
}
184
216
185
217
type ClusterParams struct {
186
- name string
187
- replicaCount int
188
- shardCount int
189
- preventDestroy bool
190
- nodeType string
191
- redisConfigs map[string]string
218
+ name string
219
+ replicaCount int
220
+ shardCount int
221
+ preventDestroy bool
222
+ nodeType string
223
+ redisConfigs map[string]string
224
+ zoneDistributionMode string
225
+ zone string
192
226
}
193
227
194
228
func createOrUpdateRedisCluster(params *ClusterParams) string {
@@ -204,6 +238,16 @@ func createOrUpdateRedisCluster(params *ClusterParams) string {
204
238
strBuilder.WriteString(fmt.Sprintf("%s = \"%s\"\n", key, value))
205
239
}
206
240
241
+ zoneDistributionConfigBlock := ``
242
+ if params.zoneDistributionMode != "" {
243
+ zoneDistributionConfigBlock = fmt.Sprintf(`
244
+ zone_distribution_config {
245
+ mode = "%s"
246
+ zone = "%s"
247
+ }
248
+ `, params.zoneDistributionMode, params.zone)
249
+ }
250
+
207
251
return fmt.Sprintf(`
208
252
resource "google_redis_cluster" "test" {
209
253
provider = google-beta
@@ -218,6 +262,7 @@ resource "google_redis_cluster" "test" {
218
262
redis_configs = {
219
263
%s
220
264
}
265
+ %s
221
266
depends_on = [
222
267
google_network_connectivity_service_connection_policy.default
223
268
]
@@ -249,7 +294,7 @@ resource "google_compute_network" "producer_net" {
249
294
name = "%s"
250
295
auto_create_subnetworks = false
251
296
}
252
- `, params.name, params.replicaCount, params.shardCount, params.nodeType, strBuilder.String(), lifecycleBlock, params.name, params.name, params.name)
297
+ `, params.name, params.replicaCount, params.shardCount, params.nodeType, strBuilder.String(), zoneDistributionConfigBlock, lifecycleBlock, params.name, params.name, params.name)
253
298
}
254
299
255
300
<% end -%>
0 commit comments