Adding passthrough behavior for API Gateway integration (#7801)

This commit is contained in:
Andy Chan 2016-07-26 01:38:51 -07:00 committed by Paul Stack
parent 1249cb8ba8
commit ba10720e5d
4 changed files with 35 additions and 5 deletions

View File

@ -79,6 +79,12 @@ func resourceAwsApiGatewayIntegration() *schema.Resource {
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
}, },
"passthrough_behavior": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ValidateFunc: validateApiGatewayIntegrationPassthroughBehavior,
},
}, },
} }
} }
@ -106,6 +112,11 @@ func resourceAwsApiGatewayIntegrationCreate(d *schema.ResourceData, meta interfa
} }
} }
var passthroughBehavior *string
if v, ok := d.GetOk("passthrough_behavior"); ok {
passthroughBehavior = aws.String(v.(string))
}
var credentials *string var credentials *string
if val, ok := d.GetOk("credentials"); ok { if val, ok := d.GetOk("credentials"); ok {
credentials = aws.String(val.(string)) credentials = aws.String(val.(string))
@ -124,6 +135,7 @@ func resourceAwsApiGatewayIntegrationCreate(d *schema.ResourceData, meta interfa
Credentials: credentials, Credentials: credentials,
CacheNamespace: nil, CacheNamespace: nil,
CacheKeyParameters: nil, CacheKeyParameters: nil,
PassthroughBehavior: passthroughBehavior,
}) })
if err != nil { if err != nil {
return fmt.Errorf("Error creating API Gateway Integration: %s", err) return fmt.Errorf("Error creating API Gateway Integration: %s", err)
@ -163,6 +175,7 @@ func resourceAwsApiGatewayIntegrationRead(d *schema.ResourceData, meta interface
d.Set("type", integration.Type) d.Set("type", integration.Type)
d.Set("uri", integration.Uri) d.Set("uri", integration.Uri)
d.Set("request_parameters_in_json", aws.StringValueMap(integration.RequestParameters)) d.Set("request_parameters_in_json", aws.StringValueMap(integration.RequestParameters))
d.Set("passthrough_behavior", integration.PassthroughBehavior)
return nil return nil
} }

View File

@ -34,6 +34,8 @@ func TestAccAWSAPIGatewayIntegration_basic(t *testing.T) {
"aws_api_gateway_integration.test", "request_templates.application/json", ""), "aws_api_gateway_integration.test", "request_templates.application/json", ""),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
"aws_api_gateway_integration.test", "request_templates.application/xml", "#set($inputRoot = $input.path('$'))\n{ }"), "aws_api_gateway_integration.test", "request_templates.application/xml", "#set($inputRoot = $input.path('$'))\n{ }"),
resource.TestCheckResourceAttr(
"aws_api_gateway_integration.test", "passthrough_behavior", "WHEN_NO_MATCH"),
), ),
}, },
@ -48,6 +50,8 @@ func TestAccAWSAPIGatewayIntegration_basic(t *testing.T) {
"aws_api_gateway_integration.test", "integration_http_method", ""), "aws_api_gateway_integration.test", "integration_http_method", ""),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
"aws_api_gateway_integration.test", "uri", ""), "aws_api_gateway_integration.test", "uri", ""),
resource.TestCheckResourceAttr(
"aws_api_gateway_integration.test", "passthrough_behavior", "NEVER"),
), ),
}, },
}, },
@ -193,6 +197,7 @@ resource "aws_api_gateway_integration" "test" {
type = "HTTP" type = "HTTP"
uri = "https://www.google.de" uri = "https://www.google.de"
integration_http_method = "GET" integration_http_method = "GET"
passthrough_behavior = "WHEN_NO_MATCH"
} }
` `
@ -230,5 +235,7 @@ resource "aws_api_gateway_integration" "test" {
PARAMS PARAMS
type = "MOCK" type = "MOCK"
passthrough_behavior = "NEVER"
} }
` `

View File

@ -451,3 +451,12 @@ func validateDbEventSubscriptionName(v interface{}, k string) (ws []string, erro
} }
return return
} }
func validateApiGatewayIntegrationPassthroughBehavior(v interface{}, k string) (ws []string, errors []error) {
value := v.(string)
if value != "WHEN_NO_MATCH" && value != "WHEN_NO_TEMPLATES" && value != "NEVER" {
errors = append(errors, fmt.Errorf(
"%q must be one of 'WHEN_NO_MATCH', 'WHEN_NO_TEMPLATES', 'NEVER'", k))
}
return
}

View File

@ -56,6 +56,7 @@ The following arguments are supported:
Not all methods are compatible with all `AWS` integrations. Not all methods are compatible with all `AWS` integrations.
e.g. Lambda function [can only be invoked](https://github.com/awslabs/aws-apigateway-importer/issues/9#issuecomment-129651005) via `POST`. e.g. Lambda function [can only be invoked](https://github.com/awslabs/aws-apigateway-importer/issues/9#issuecomment-129651005) via `POST`.
* `request_templates` - (Optional) A map of the integration's request templates. * `request_templates` - (Optional) A map of the integration's request templates.
* `passthrough_behavior` - (Optional) The integration passthrough behavior (`WHEN_NO_MATCH`, `WHEN_NO_TEMPLATES`, `NEVER`). **Required** if `request_templates` is used.
* `request_parameters_in_json` - (Optional) A map written as a JSON string specifying * `request_parameters_in_json` - (Optional) A map written as a JSON string specifying
the request query string parameters and headers that should be passed to the the request query string parameters and headers that should be passed to the
backend responder. backend responder.