provider/aws: Add support for content_handling to (#11002)

aws_api_gateway_integration_response

This continues the work carried out in #10696

```
% make testacc TEST=./builtin/providers/aws TESTARGS='-run=TestAccAWSAPIGatewayIntegrationResponse_'
==> Checking that code complies with gofmt requirements...
go generate $(go list ./... | grep -v /terraform/vendor/)
2017/01/03 14:18:46 Generated command/internal_plugin_list.go
TF_ACC=1 go test ./builtin/providers/aws -v
-run=TestAccAWSAPIGatewayIntegrationResponse_ -timeout 120m
=== RUN   TestAccAWSAPIGatewayIntegrationResponse_basic
--- PASS: TestAccAWSAPIGatewayIntegrationResponse_basic (57.33s)
PASS
ok      github.com/hashicorp/terraform/builtin/providers/aws57.352s
```
This commit is contained in:
Paul Stack 2017-01-09 14:46:21 +00:00 committed by GitHub
parent e28bb354d5
commit ba41375fd9
4 changed files with 29 additions and 18 deletions

View File

@ -17,7 +17,7 @@ func resourceAwsApiGatewayIntegration() *schema.Resource {
return &schema.Resource{ return &schema.Resource{
Create: resourceAwsApiGatewayIntegrationCreate, Create: resourceAwsApiGatewayIntegrationCreate,
Read: resourceAwsApiGatewayIntegrationRead, Read: resourceAwsApiGatewayIntegrationRead,
Update: resourceAwsApiGatewayIntegrationUpdate, Update: resourceAwsApiGatewayIntegrationCreate,
Delete: resourceAwsApiGatewayIntegrationDelete, Delete: resourceAwsApiGatewayIntegrationDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
@ -202,10 +202,6 @@ func resourceAwsApiGatewayIntegrationRead(d *schema.ResourceData, meta interface
return nil return nil
} }
func resourceAwsApiGatewayIntegrationUpdate(d *schema.ResourceData, meta interface{}) error {
return resourceAwsApiGatewayIntegrationCreate(d, meta)
}
func resourceAwsApiGatewayIntegrationDelete(d *schema.ResourceData, meta interface{}) error { func resourceAwsApiGatewayIntegrationDelete(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).apigateway conn := meta.(*AWSClient).apigateway
log.Printf("[DEBUG] Deleting API Gateway Integration: %s", d.Id()) log.Printf("[DEBUG] Deleting API Gateway Integration: %s", d.Id())

View File

@ -17,58 +17,64 @@ func resourceAwsApiGatewayIntegrationResponse() *schema.Resource {
return &schema.Resource{ return &schema.Resource{
Create: resourceAwsApiGatewayIntegrationResponseCreate, Create: resourceAwsApiGatewayIntegrationResponseCreate,
Read: resourceAwsApiGatewayIntegrationResponseRead, Read: resourceAwsApiGatewayIntegrationResponseRead,
Update: resourceAwsApiGatewayIntegrationResponseUpdate, Update: resourceAwsApiGatewayIntegrationResponseCreate,
Delete: resourceAwsApiGatewayIntegrationResponseDelete, Delete: resourceAwsApiGatewayIntegrationResponseDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"rest_api_id": &schema.Schema{ "rest_api_id": {
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"resource_id": &schema.Schema{ "resource_id": {
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"http_method": &schema.Schema{ "http_method": {
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
ValidateFunc: validateHTTPMethod, ValidateFunc: validateHTTPMethod,
}, },
"status_code": &schema.Schema{ "status_code": {
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
}, },
"selection_pattern": &schema.Schema{ "selection_pattern": {
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
}, },
"response_templates": &schema.Schema{ "response_templates": {
Type: schema.TypeMap, Type: schema.TypeMap,
Optional: true, Optional: true,
Elem: schema.TypeString, Elem: schema.TypeString,
}, },
"response_parameters": &schema.Schema{ "response_parameters": {
Type: schema.TypeMap, Type: schema.TypeMap,
Elem: schema.TypeString, Elem: schema.TypeString,
Optional: true, Optional: true,
ConflictsWith: []string{"response_parameters_in_json"}, ConflictsWith: []string{"response_parameters_in_json"},
}, },
"response_parameters_in_json": &schema.Schema{ "response_parameters_in_json": {
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ConflictsWith: []string{"response_parameters"}, ConflictsWith: []string{"response_parameters"},
Deprecated: "Use field response_parameters instead", Deprecated: "Use field response_parameters instead",
}, },
"content_handling": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: validateApiGatewayIntegrationContentHandling,
},
}, },
} }
} }
@ -92,6 +98,10 @@ func resourceAwsApiGatewayIntegrationResponseCreate(d *schema.ResourceData, meta
return fmt.Errorf("Error unmarshaling response_parameters_in_json: %s", err) return fmt.Errorf("Error unmarshaling response_parameters_in_json: %s", err)
} }
} }
var contentHandling *string
if val, ok := d.GetOk("content_handling"); ok {
contentHandling = aws.String(val.(string))
}
input := apigateway.PutIntegrationResponseInput{ input := apigateway.PutIntegrationResponseInput{
HttpMethod: aws.String(d.Get("http_method").(string)), HttpMethod: aws.String(d.Get("http_method").(string)),
@ -100,10 +110,12 @@ func resourceAwsApiGatewayIntegrationResponseCreate(d *schema.ResourceData, meta
StatusCode: aws.String(d.Get("status_code").(string)), StatusCode: aws.String(d.Get("status_code").(string)),
ResponseTemplates: aws.StringMap(templates), ResponseTemplates: aws.StringMap(templates),
ResponseParameters: aws.StringMap(parameters), ResponseParameters: aws.StringMap(parameters),
ContentHandling: contentHandling,
} }
if v, ok := d.GetOk("selection_pattern"); ok { if v, ok := d.GetOk("selection_pattern"); ok {
input.SelectionPattern = aws.String(v.(string)) input.SelectionPattern = aws.String(v.(string))
} }
_, err := conn.PutIntegrationResponse(&input) _, err := conn.PutIntegrationResponse(&input)
if err != nil { if err != nil {
return fmt.Errorf("Error creating API Gateway Integration Response: %s", err) return fmt.Errorf("Error creating API Gateway Integration Response: %s", err)
@ -143,10 +155,6 @@ func resourceAwsApiGatewayIntegrationResponseRead(d *schema.ResourceData, meta i
return nil return nil
} }
func resourceAwsApiGatewayIntegrationResponseUpdate(d *schema.ResourceData, meta interface{}) error {
return resourceAwsApiGatewayIntegrationResponseCreate(d, meta)
}
func resourceAwsApiGatewayIntegrationResponseDelete(d *schema.ResourceData, meta interface{}) error { func resourceAwsApiGatewayIntegrationResponseDelete(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).apigateway conn := meta.(*AWSClient).apigateway
log.Printf("[DEBUG] Deleting API Gateway Integration Response: %s", d.Id()) log.Printf("[DEBUG] Deleting API Gateway Integration Response: %s", d.Id())

View File

@ -28,6 +28,8 @@ func TestAccAWSAPIGatewayIntegrationResponse_basic(t *testing.T) {
"aws_api_gateway_integration_response.test", "response_templates.application/json", ""), "aws_api_gateway_integration_response.test", "response_templates.application/json", ""),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
"aws_api_gateway_integration_response.test", "response_templates.application/xml", "#set($inputRoot = $input.path('$'))\n{ }"), "aws_api_gateway_integration_response.test", "response_templates.application/xml", "#set($inputRoot = $input.path('$'))\n{ }"),
resource.TestCheckResourceAttr(
"aws_api_gateway_integration_response.test", "content_handling", ""),
), ),
}, },
@ -40,6 +42,8 @@ func TestAccAWSAPIGatewayIntegrationResponse_basic(t *testing.T) {
"aws_api_gateway_integration_response.test", "response_templates.application/json", "$input.path('$')"), "aws_api_gateway_integration_response.test", "response_templates.application/json", "$input.path('$')"),
resource.TestCheckResourceAttr( resource.TestCheckResourceAttr(
"aws_api_gateway_integration_response.test", "response_templates.application/xml", ""), "aws_api_gateway_integration_response.test", "response_templates.application/xml", ""),
resource.TestCheckResourceAttr(
"aws_api_gateway_integration_response.test", "content_handling", "CONVERT_TO_BINARY"),
), ),
}, },
}, },
@ -282,5 +286,7 @@ resource "aws_api_gateway_integration_response" "test" {
"application/xml" = "" "application/xml" = ""
} }
content_handling = "CONVERT_TO_BINARY"
} }
` `

View File

@ -72,3 +72,4 @@ The following arguments are supported:
* `response_parameters` - (Optional) A map of response parameters that can be read from the backend response. * `response_parameters` - (Optional) A map of response parameters that can be read from the backend response.
For example: `response_parameters = { "method.response.header.X-Some-Header" = "integration.response.header.X-Some-Other-Header" }`, For example: `response_parameters = { "method.response.header.X-Some-Header" = "integration.response.header.X-Some-Other-Header" }`,
* `response_parameters_in_json` - **Deprecated**, use `response_parameters` instead. * `response_parameters_in_json` - **Deprecated**, use `response_parameters` instead.
* `content_handling` - (Optional) Specifies how to handle request payload content type conversions. Supported values are `CONVERT_TO_BINARY` and `CONVERT_TO_TEXT`. If this property is not defined, the response payload will be passed through from the integration response to the method response without modification.