Skip to content

Commit 8aa6d44

Browse files
committed
r/aws_apigatewayv2_integration: Data mapping in HTTP APIs.
Acceptance test output: $ make testacc TEST=./aws/ TESTARGS='-run=TestAccAWSAPIGatewayV2Integration_' ==> Checking that code complies with gofmt requirements... TF_ACC=1 go test ./aws -v -count 1 -parallel 20 -run=TestAccAWSAPIGatewayV2Integration_ -timeout 120m === RUN TestAccAWSAPIGatewayV2Integration_basicWebSocket === PAUSE TestAccAWSAPIGatewayV2Integration_basicWebSocket === RUN TestAccAWSAPIGatewayV2Integration_basicHttp === PAUSE TestAccAWSAPIGatewayV2Integration_basicHttp === RUN TestAccAWSAPIGatewayV2Integration_disappears === PAUSE TestAccAWSAPIGatewayV2Integration_disappears === RUN TestAccAWSAPIGatewayV2Integration_DataMappingHttp === PAUSE TestAccAWSAPIGatewayV2Integration_DataMappingHttp === RUN TestAccAWSAPIGatewayV2Integration_IntegrationTypeHttp === PAUSE TestAccAWSAPIGatewayV2Integration_IntegrationTypeHttp === RUN TestAccAWSAPIGatewayV2Integration_LambdaWebSocket === PAUSE TestAccAWSAPIGatewayV2Integration_LambdaWebSocket === RUN TestAccAWSAPIGatewayV2Integration_LambdaHttp === PAUSE TestAccAWSAPIGatewayV2Integration_LambdaHttp === RUN TestAccAWSAPIGatewayV2Integration_VpcLinkWebSocket === PAUSE TestAccAWSAPIGatewayV2Integration_VpcLinkWebSocket === RUN TestAccAWSAPIGatewayV2Integration_VpcLinkHttp === PAUSE TestAccAWSAPIGatewayV2Integration_VpcLinkHttp === RUN TestAccAWSAPIGatewayV2Integration_AwsServiceIntegration === PAUSE TestAccAWSAPIGatewayV2Integration_AwsServiceIntegration === CONT TestAccAWSAPIGatewayV2Integration_basicWebSocket === CONT TestAccAWSAPIGatewayV2Integration_LambdaHttp === CONT TestAccAWSAPIGatewayV2Integration_AwsServiceIntegration === CONT TestAccAWSAPIGatewayV2Integration_VpcLinkHttp === CONT TestAccAWSAPIGatewayV2Integration_VpcLinkWebSocket === CONT TestAccAWSAPIGatewayV2Integration_DataMappingHttp === CONT TestAccAWSAPIGatewayV2Integration_LambdaWebSocket === CONT TestAccAWSAPIGatewayV2Integration_IntegrationTypeHttp === CONT TestAccAWSAPIGatewayV2Integration_disappears === CONT TestAccAWSAPIGatewayV2Integration_basicHttp --- PASS: TestAccAWSAPIGatewayV2Integration_disappears (29.08s) --- PASS: TestAccAWSAPIGatewayV2Integration_basicWebSocket (30.68s) --- PASS: TestAccAWSAPIGatewayV2Integration_basicHttp (32.61s) --- PASS: TestAccAWSAPIGatewayV2Integration_IntegrationTypeHttp (46.05s) --- PASS: TestAccAWSAPIGatewayV2Integration_DataMappingHttp (48.71s) --- PASS: TestAccAWSAPIGatewayV2Integration_AwsServiceIntegration (48.96s) --- PASS: TestAccAWSAPIGatewayV2Integration_LambdaWebSocket (49.47s) --- PASS: TestAccAWSAPIGatewayV2Integration_LambdaHttp (53.71s) --- PASS: TestAccAWSAPIGatewayV2Integration_VpcLinkHttp (412.36s) --- PASS: TestAccAWSAPIGatewayV2Integration_VpcLinkWebSocket (718.91s) PASS ok github.com/terraform-providers/terraform-provider-aws/aws 719.017s
1 parent 3bd91cf commit 8aa6d44

3 files changed

+276
-3
lines changed

aws/resource_aws_apigatewayv2_integration.go

+99
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,25 @@ func resourceAwsApiGatewayV2Integration() *schema.Resource {
119119
// Length between [0-32768].
120120
Elem: &schema.Schema{Type: schema.TypeString},
121121
},
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+
},
122141
"template_selection_expression": {
123142
Type: schema.TypeString,
124143
Optional: true,
@@ -189,6 +208,9 @@ func resourceAwsApiGatewayV2IntegrationCreate(d *schema.ResourceData, meta inter
189208
if v, ok := d.GetOk("request_templates"); ok {
190209
req.RequestTemplates = stringMapToPointers(v.(map[string]interface{}))
191210
}
211+
if v, ok := d.GetOk("response_parameters"); ok && v.(*schema.Set).Len() > 0 {
212+
req.ResponseParameters = expandApiGateway2IntegrationResponseParameters(v.(*schema.Set).List())
213+
}
192214
if v, ok := d.GetOk("template_selection_expression"); ok {
193215
req.TemplateSelectionExpression = aws.String(v.(string))
194216
}
@@ -246,6 +268,10 @@ func resourceAwsApiGatewayV2IntegrationRead(d *schema.ResourceData, meta interfa
246268
if err != nil {
247269
return fmt.Errorf("error setting request_templates: %s", err)
248270
}
271+
err = d.Set("response_parameters", flattenApiGateway2IntegrationResponseParameters(resp.ResponseParameters))
272+
if err != nil {
273+
return fmt.Errorf("error setting response_parameters: %s", err)
274+
}
249275
d.Set("template_selection_expression", resp.TemplateSelectionExpression)
250276
d.Set("timeout_milliseconds", resp.TimeoutInMillis)
251277
if err := d.Set("tls_config", flattenApiGateway2TlsConfig(resp.TlsConfig)); err != nil {
@@ -298,6 +324,7 @@ func resourceAwsApiGatewayV2IntegrationUpdate(d *schema.ResourceData, meta inter
298324
if d.HasChange("request_parameters") {
299325
o, n := d.GetChange("request_parameters")
300326
add, del, nop := diffStringMaps(o.(map[string]interface{}), n.(map[string]interface{}))
327+
301328
// Parameters are removed by setting the associated value to "".
302329
for k := range del {
303330
del[k] = aws.String("")
@@ -311,11 +338,36 @@ func resourceAwsApiGatewayV2IntegrationUpdate(d *schema.ResourceData, meta inter
311338
for k, v := range nop {
312339
variables[k] = v
313340
}
341+
314342
req.RequestParameters = variables
315343
}
316344
if d.HasChange("request_templates") {
317345
req.RequestTemplates = stringMapToPointers(d.Get("request_templates").(map[string]interface{}))
318346
}
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+
}
319371
if d.HasChange("template_selection_expression") {
320372
req.TemplateSelectionExpression = aws.String(d.Get("template_selection_expression").(string))
321373
}
@@ -406,3 +458,50 @@ func flattenApiGateway2TlsConfig(config *apigatewayv2.TlsConfig) []interface{} {
406458
"server_name_to_verify": aws.StringValue(config.ServerNameToVerify),
407459
}}
408460
}
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

Comments
 (0)