@@ -119,6 +119,25 @@ func resourceAwsApiGatewayV2Integration() *schema.Resource {
119
119
// Length between [0-32768].
120
120
Elem : & schema.Schema {Type : schema .TypeString },
121
121
},
122
+ "response_parameters" : {
123
+ Type : schema .TypeSet ,
124
+ Optional : true ,
125
+ MinItems : 0 ,
126
+ Elem : & schema.Resource {
127
+ Schema : map [string ]* schema.Schema {
128
+ "mappings" : {
129
+ Type : schema .TypeMap ,
130
+ Required : true ,
131
+ // Length between [1-512].
132
+ Elem : & schema.Schema {Type : schema .TypeString },
133
+ },
134
+ "status_code" : {
135
+ Type : schema .TypeString ,
136
+ Required : true ,
137
+ },
138
+ },
139
+ },
140
+ },
122
141
"template_selection_expression" : {
123
142
Type : schema .TypeString ,
124
143
Optional : true ,
@@ -189,6 +208,9 @@ func resourceAwsApiGatewayV2IntegrationCreate(d *schema.ResourceData, meta inter
189
208
if v , ok := d .GetOk ("request_templates" ); ok {
190
209
req .RequestTemplates = stringMapToPointers (v .(map [string ]interface {}))
191
210
}
211
+ if v , ok := d .GetOk ("response_parameters" ); ok && v .(* schema.Set ).Len () > 0 {
212
+ req .ResponseParameters = expandApiGateway2IntegrationResponseParameters (v .(* schema.Set ).List ())
213
+ }
192
214
if v , ok := d .GetOk ("template_selection_expression" ); ok {
193
215
req .TemplateSelectionExpression = aws .String (v .(string ))
194
216
}
@@ -246,6 +268,10 @@ func resourceAwsApiGatewayV2IntegrationRead(d *schema.ResourceData, meta interfa
246
268
if err != nil {
247
269
return fmt .Errorf ("error setting request_templates: %s" , err )
248
270
}
271
+ err = d .Set ("response_parameters" , flattenApiGateway2IntegrationResponseParameters (resp .ResponseParameters ))
272
+ if err != nil {
273
+ return fmt .Errorf ("error setting response_parameters: %s" , err )
274
+ }
249
275
d .Set ("template_selection_expression" , resp .TemplateSelectionExpression )
250
276
d .Set ("timeout_milliseconds" , resp .TimeoutInMillis )
251
277
if err := d .Set ("tls_config" , flattenApiGateway2TlsConfig (resp .TlsConfig )); err != nil {
@@ -298,6 +324,7 @@ func resourceAwsApiGatewayV2IntegrationUpdate(d *schema.ResourceData, meta inter
298
324
if d .HasChange ("request_parameters" ) {
299
325
o , n := d .GetChange ("request_parameters" )
300
326
add , del , nop := diffStringMaps (o .(map [string ]interface {}), n .(map [string ]interface {}))
327
+
301
328
// Parameters are removed by setting the associated value to "".
302
329
for k := range del {
303
330
del [k ] = aws .String ("" )
@@ -311,11 +338,36 @@ func resourceAwsApiGatewayV2IntegrationUpdate(d *schema.ResourceData, meta inter
311
338
for k , v := range nop {
312
339
variables [k ] = v
313
340
}
341
+
314
342
req .RequestParameters = variables
315
343
}
316
344
if d .HasChange ("request_templates" ) {
317
345
req .RequestTemplates = stringMapToPointers (d .Get ("request_templates" ).(map [string ]interface {}))
318
346
}
347
+ if d .HasChange ("response_parameters" ) {
348
+ o , n := d .GetChange ("response_parameters" )
349
+ os := o .(* schema.Set )
350
+ ns := n .(* schema.Set )
351
+ del := os .Difference (ns ).List ()
352
+
353
+ req .ResponseParameters = expandApiGateway2IntegrationResponseParameters (ns .List ())
354
+
355
+ // Parameters are removed by setting the associated value to {}.
356
+ for _ , tfMapRaw := range del {
357
+ tfMap , ok := tfMapRaw .(map [string ]interface {})
358
+
359
+ if ! ok {
360
+ continue
361
+ }
362
+
363
+ if v , ok := tfMap ["status_code" ].(string ); ok && v != "" {
364
+ if req .ResponseParameters == nil {
365
+ req .ResponseParameters = map [string ]map [string ]* string {}
366
+ }
367
+ req .ResponseParameters [v ] = map [string ]* string {}
368
+ }
369
+ }
370
+ }
319
371
if d .HasChange ("template_selection_expression" ) {
320
372
req .TemplateSelectionExpression = aws .String (d .Get ("template_selection_expression" ).(string ))
321
373
}
@@ -406,3 +458,50 @@ func flattenApiGateway2TlsConfig(config *apigatewayv2.TlsConfig) []interface{} {
406
458
"server_name_to_verify" : aws .StringValue (config .ServerNameToVerify ),
407
459
}}
408
460
}
461
+
462
+ func expandApiGateway2IntegrationResponseParameters (tfList []interface {}) map [string ]map [string ]* string {
463
+ if len (tfList ) == 0 {
464
+ return nil
465
+ }
466
+
467
+ responseParameters := map [string ]map [string ]* string {}
468
+
469
+ for _ , tfMapRaw := range tfList {
470
+ tfMap , ok := tfMapRaw .(map [string ]interface {})
471
+
472
+ if ! ok {
473
+ continue
474
+ }
475
+
476
+ if vStatusCode , ok := tfMap ["status_code" ].(string ); ok && vStatusCode != "" {
477
+ if v , ok := tfMap ["mappings" ].(map [string ]interface {}); ok && len (v ) > 0 {
478
+ responseParameters [vStatusCode ] = stringMapToPointers (v )
479
+ }
480
+ }
481
+ }
482
+
483
+ return responseParameters
484
+ }
485
+
486
+ func flattenApiGateway2IntegrationResponseParameters (responseParameters map [string ]map [string ]* string ) []interface {} {
487
+ if len (responseParameters ) == 0 {
488
+ return nil
489
+ }
490
+
491
+ var tfList []interface {}
492
+
493
+ for statusCode , mappings := range responseParameters {
494
+ if len (mappings ) == 0 {
495
+ continue
496
+ }
497
+
498
+ tfMap := map [string ]interface {}{}
499
+
500
+ tfMap ["status_code" ] = statusCode
501
+ tfMap ["mappings" ] = aws .StringValueMap (mappings )
502
+
503
+ tfList = append (tfList , tfMap )
504
+ }
505
+
506
+ return tfList
507
+ }
0 commit comments