github.com/anfernee/terraform@v0.6.16-0.20160430000239-06e5085a92f2/builtin/providers/aws/resource_aws_api_gateway_integration_response.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "log" 6 "time" 7 8 "github.com/aws/aws-sdk-go/aws" 9 "github.com/aws/aws-sdk-go/aws/awserr" 10 "github.com/aws/aws-sdk-go/service/apigateway" 11 "github.com/hashicorp/terraform/helper/resource" 12 "github.com/hashicorp/terraform/helper/schema" 13 ) 14 15 func resourceAwsApiGatewayIntegrationResponse() *schema.Resource { 16 return &schema.Resource{ 17 Create: resourceAwsApiGatewayIntegrationResponseCreate, 18 Read: resourceAwsApiGatewayIntegrationResponseRead, 19 Update: resourceAwsApiGatewayIntegrationResponseUpdate, 20 Delete: resourceAwsApiGatewayIntegrationResponseDelete, 21 22 Schema: map[string]*schema.Schema{ 23 "rest_api_id": &schema.Schema{ 24 Type: schema.TypeString, 25 Required: true, 26 ForceNew: true, 27 }, 28 29 "resource_id": &schema.Schema{ 30 Type: schema.TypeString, 31 Required: true, 32 ForceNew: true, 33 }, 34 35 "http_method": &schema.Schema{ 36 Type: schema.TypeString, 37 Required: true, 38 ForceNew: true, 39 ValidateFunc: validateHTTPMethod, 40 }, 41 42 "status_code": &schema.Schema{ 43 Type: schema.TypeString, 44 Required: true, 45 }, 46 47 "selection_pattern": &schema.Schema{ 48 Type: schema.TypeString, 49 Optional: true, 50 }, 51 52 "response_templates": &schema.Schema{ 53 Type: schema.TypeMap, 54 Optional: true, 55 Elem: schema.TypeString, 56 }, 57 }, 58 } 59 } 60 61 func resourceAwsApiGatewayIntegrationResponseCreate(d *schema.ResourceData, meta interface{}) error { 62 conn := meta.(*AWSClient).apigateway 63 64 templates := make(map[string]string) 65 for k, v := range d.Get("response_templates").(map[string]interface{}) { 66 templates[k] = v.(string) 67 } 68 69 input := apigateway.PutIntegrationResponseInput{ 70 HttpMethod: aws.String(d.Get("http_method").(string)), 71 ResourceId: aws.String(d.Get("resource_id").(string)), 72 RestApiId: aws.String(d.Get("rest_api_id").(string)), 73 StatusCode: aws.String(d.Get("status_code").(string)), 74 ResponseTemplates: aws.StringMap(templates), 75 // TODO implement once [GH-2143](https://github.com/hashicorp/terraform/issues/2143) has been implemented 76 ResponseParameters: nil, 77 } 78 if v, ok := d.GetOk("selection_pattern"); ok { 79 input.SelectionPattern = aws.String(v.(string)) 80 } 81 _, err := conn.PutIntegrationResponse(&input) 82 if err != nil { 83 return fmt.Errorf("Error creating API Gateway Integration Response: %s", err) 84 } 85 86 d.SetId(fmt.Sprintf("agir-%s-%s-%s-%s", d.Get("rest_api_id").(string), d.Get("resource_id").(string), d.Get("http_method").(string), d.Get("status_code").(string))) 87 log.Printf("[DEBUG] API Gateway Integration Response ID: %s", d.Id()) 88 89 return resourceAwsApiGatewayIntegrationResponseRead(d, meta) 90 } 91 92 func resourceAwsApiGatewayIntegrationResponseRead(d *schema.ResourceData, meta interface{}) error { 93 conn := meta.(*AWSClient).apigateway 94 95 log.Printf("[DEBUG] Reading API Gateway Integration Response %s", d.Id()) 96 integrationResponse, err := conn.GetIntegrationResponse(&apigateway.GetIntegrationResponseInput{ 97 HttpMethod: aws.String(d.Get("http_method").(string)), 98 ResourceId: aws.String(d.Get("resource_id").(string)), 99 RestApiId: aws.String(d.Get("rest_api_id").(string)), 100 StatusCode: aws.String(d.Get("status_code").(string)), 101 }) 102 if err != nil { 103 if awsErr, ok := err.(awserr.Error); ok && awsErr.Code() == "NotFoundException" { 104 d.SetId("") 105 return nil 106 } 107 return err 108 } 109 log.Printf("[DEBUG] Received API Gateway Integration Response: %s", integrationResponse) 110 111 d.SetId(fmt.Sprintf("agir-%s-%s-%s-%s", d.Get("rest_api_id").(string), d.Get("resource_id").(string), d.Get("http_method").(string), d.Get("status_code").(string))) 112 d.Set("response_templates", integrationResponse.ResponseTemplates) 113 d.Set("selection_pattern", integrationResponse.SelectionPattern) 114 115 return nil 116 } 117 118 func resourceAwsApiGatewayIntegrationResponseUpdate(d *schema.ResourceData, meta interface{}) error { 119 return resourceAwsApiGatewayIntegrationResponseCreate(d, meta) 120 } 121 122 func resourceAwsApiGatewayIntegrationResponseDelete(d *schema.ResourceData, meta interface{}) error { 123 conn := meta.(*AWSClient).apigateway 124 log.Printf("[DEBUG] Deleting API Gateway Integration Response: %s", d.Id()) 125 126 return resource.Retry(5*time.Minute, func() *resource.RetryError { 127 _, err := conn.DeleteIntegrationResponse(&apigateway.DeleteIntegrationResponseInput{ 128 HttpMethod: aws.String(d.Get("http_method").(string)), 129 ResourceId: aws.String(d.Get("resource_id").(string)), 130 RestApiId: aws.String(d.Get("rest_api_id").(string)), 131 StatusCode: aws.String(d.Get("status_code").(string)), 132 }) 133 if err == nil { 134 return nil 135 } 136 137 apigatewayErr, ok := err.(awserr.Error) 138 if apigatewayErr.Code() == "NotFoundException" { 139 return nil 140 } 141 142 if !ok { 143 return resource.NonRetryableError(err) 144 } 145 146 return resource.NonRetryableError(err) 147 }) 148 }