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