@@ -58,6 +58,22 @@ func resourcePubsubTopic() *schema.Resource {
58
58
Optional : true ,
59
59
Elem : & schema.Schema {Type : schema .TypeString },
60
60
},
61
+ "message_storage_policy" : {
62
+ Type : schema .TypeList ,
63
+ Optional : true ,
64
+ MaxItems : 1 ,
65
+ Elem : & schema.Resource {
66
+ Schema : map [string ]* schema.Schema {
67
+ "allowed_persistence_regions" : {
68
+ Type : schema .TypeList ,
69
+ Required : true ,
70
+ Elem : & schema.Schema {
71
+ Type : schema .TypeString ,
72
+ },
73
+ },
74
+ },
75
+ },
76
+ },
61
77
"project" : {
62
78
Type : schema .TypeString ,
63
79
Optional : true ,
@@ -90,6 +106,12 @@ func resourcePubsubTopicCreate(d *schema.ResourceData, meta interface{}) error {
90
106
} else if v , ok := d .GetOkExists ("labels" ); ! isEmptyValue (reflect .ValueOf (labelsProp )) && (ok || ! reflect .DeepEqual (v , labelsProp )) {
91
107
obj ["labels" ] = labelsProp
92
108
}
109
+ messageStoragePolicyProp , err := expandPubsubTopicMessageStoragePolicy (d .Get ("message_storage_policy" ), d , config )
110
+ if err != nil {
111
+ return err
112
+ } else if v , ok := d .GetOkExists ("message_storage_policy" ); ! isEmptyValue (reflect .ValueOf (messageStoragePolicyProp )) && (ok || ! reflect .DeepEqual (v , messageStoragePolicyProp )) {
113
+ obj ["messageStoragePolicy" ] = messageStoragePolicyProp
114
+ }
93
115
94
116
obj , err = resourcePubsubTopicEncoder (d , meta , obj )
95
117
if err != nil {
@@ -149,6 +171,9 @@ func resourcePubsubTopicRead(d *schema.ResourceData, meta interface{}) error {
149
171
if err := d .Set ("labels" , flattenPubsubTopicLabels (res ["labels" ], d )); err != nil {
150
172
return fmt .Errorf ("Error reading Topic: %s" , err )
151
173
}
174
+ if err := d .Set ("message_storage_policy" , flattenPubsubTopicMessageStoragePolicy (res ["messageStoragePolicy" ], d )); err != nil {
175
+ return fmt .Errorf ("Error reading Topic: %s" , err )
176
+ }
152
177
153
178
return nil
154
179
}
@@ -163,6 +188,12 @@ func resourcePubsubTopicUpdate(d *schema.ResourceData, meta interface{}) error {
163
188
} else if v , ok := d .GetOkExists ("labels" ); ! isEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , labelsProp )) {
164
189
obj ["labels" ] = labelsProp
165
190
}
191
+ messageStoragePolicyProp , err := expandPubsubTopicMessageStoragePolicy (d .Get ("message_storage_policy" ), d , config )
192
+ if err != nil {
193
+ return err
194
+ } else if v , ok := d .GetOkExists ("message_storage_policy" ); ! isEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , messageStoragePolicyProp )) {
195
+ obj ["messageStoragePolicy" ] = messageStoragePolicyProp
196
+ }
166
197
167
198
obj , err = resourcePubsubTopicUpdateEncoder (d , meta , obj )
168
199
if err != nil {
@@ -180,6 +211,10 @@ func resourcePubsubTopicUpdate(d *schema.ResourceData, meta interface{}) error {
180
211
if d .HasChange ("labels" ) {
181
212
updateMask = append (updateMask , "labels" )
182
213
}
214
+
215
+ if d .HasChange ("message_storage_policy" ) {
216
+ updateMask = append (updateMask , "messageStoragePolicy" )
217
+ }
183
218
// updateMask is a URL parameter but not present in the schema, so replaceVars
184
219
// won't set it
185
220
url , err = addQueryParams (url , map [string ]string {"updateMask" : strings .Join (updateMask , "," )})
@@ -249,6 +284,23 @@ func flattenPubsubTopicLabels(v interface{}, d *schema.ResourceData) interface{}
249
284
return v
250
285
}
251
286
287
+ func flattenPubsubTopicMessageStoragePolicy (v interface {}, d * schema.ResourceData ) interface {} {
288
+ if v == nil {
289
+ return nil
290
+ }
291
+ original := v .(map [string ]interface {})
292
+ if len (original ) == 0 {
293
+ return nil
294
+ }
295
+ transformed := make (map [string ]interface {})
296
+ transformed ["allowed_persistence_regions" ] =
297
+ flattenPubsubTopicMessageStoragePolicyAllowedPersistenceRegions (original ["allowedPersistenceRegions" ], d )
298
+ return []interface {}{transformed }
299
+ }
300
+ func flattenPubsubTopicMessageStoragePolicyAllowedPersistenceRegions (v interface {}, d * schema.ResourceData ) interface {} {
301
+ return v
302
+ }
303
+
252
304
func expandPubsubTopicName (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
253
305
return GetResourceNameFromSelfLink (v .(string )), nil
254
306
}
@@ -268,6 +320,29 @@ func expandPubsubTopicLabels(v interface{}, d TerraformResourceData, config *Con
268
320
return m , nil
269
321
}
270
322
323
+ func expandPubsubTopicMessageStoragePolicy (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
324
+ l := v .([]interface {})
325
+ if len (l ) == 0 || l [0 ] == nil {
326
+ return nil , nil
327
+ }
328
+ raw := l [0 ]
329
+ original := raw .(map [string ]interface {})
330
+ transformed := make (map [string ]interface {})
331
+
332
+ transformedAllowedPersistenceRegions , err := expandPubsubTopicMessageStoragePolicyAllowedPersistenceRegions (original ["allowed_persistence_regions" ], d , config )
333
+ if err != nil {
334
+ return nil , err
335
+ } else if val := reflect .ValueOf (transformedAllowedPersistenceRegions ); val .IsValid () && ! isEmptyValue (val ) {
336
+ transformed ["allowedPersistenceRegions" ] = transformedAllowedPersistenceRegions
337
+ }
338
+
339
+ return transformed , nil
340
+ }
341
+
342
+ func expandPubsubTopicMessageStoragePolicyAllowedPersistenceRegions (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
343
+ return v , nil
344
+ }
345
+
271
346
func resourcePubsubTopicEncoder (d * schema.ResourceData , meta interface {}, obj map [string ]interface {}) (map [string ]interface {}, error ) {
272
347
delete (obj , "name" )
273
348
return obj , nil
0 commit comments