github.com/minamijoyo/terraform@v0.7.8-0.20161029001309-18b3736ba44b/builtin/providers/aws/resource_aws_api_gateway_rest_api.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 resourceAwsApiGatewayRestApi() *schema.Resource { 16 return &schema.Resource{ 17 Create: resourceAwsApiGatewayRestApiCreate, 18 Read: resourceAwsApiGatewayRestApiRead, 19 Update: resourceAwsApiGatewayRestApiUpdate, 20 Delete: resourceAwsApiGatewayRestApiDelete, 21 22 Schema: map[string]*schema.Schema{ 23 "name": &schema.Schema{ 24 Type: schema.TypeString, 25 Required: true, 26 }, 27 28 "description": &schema.Schema{ 29 Type: schema.TypeString, 30 Optional: true, 31 }, 32 33 "root_resource_id": &schema.Schema{ 34 Type: schema.TypeString, 35 Computed: true, 36 }, 37 }, 38 } 39 } 40 41 func resourceAwsApiGatewayRestApiCreate(d *schema.ResourceData, meta interface{}) error { 42 conn := meta.(*AWSClient).apigateway 43 log.Printf("[DEBUG] Creating API Gateway") 44 45 var description *string 46 if d.Get("description").(string) != "" { 47 description = aws.String(d.Get("description").(string)) 48 } 49 gateway, err := conn.CreateRestApi(&apigateway.CreateRestApiInput{ 50 Name: aws.String(d.Get("name").(string)), 51 Description: description, 52 }) 53 if err != nil { 54 return fmt.Errorf("Error creating API Gateway: %s", err) 55 } 56 57 d.SetId(*gateway.Id) 58 59 return resourceAwsApiGatewayRestApiRefreshResources(d, meta) 60 } 61 62 func resourceAwsApiGatewayRestApiRefreshResources(d *schema.ResourceData, meta interface{}) error { 63 conn := meta.(*AWSClient).apigateway 64 65 resp, err := conn.GetResources(&apigateway.GetResourcesInput{ 66 RestApiId: aws.String(d.Id()), 67 }) 68 if err != nil { 69 return err 70 } 71 72 for _, item := range resp.Items { 73 if *item.Path == "/" { 74 d.Set("root_resource_id", item.Id) 75 break 76 } 77 } 78 79 return nil 80 } 81 82 func resourceAwsApiGatewayRestApiRead(d *schema.ResourceData, meta interface{}) error { 83 conn := meta.(*AWSClient).apigateway 84 log.Printf("[DEBUG] Reading API Gateway %s", d.Id()) 85 86 api, err := conn.GetRestApi(&apigateway.GetRestApiInput{ 87 RestApiId: aws.String(d.Id()), 88 }) 89 if err != nil { 90 if awsErr, ok := err.(awserr.Error); ok && awsErr.Code() == "NotFoundException" { 91 d.SetId("") 92 return nil 93 } 94 return err 95 } 96 97 d.SetId(*api.Id) 98 d.Set("name", api.Name) 99 d.Set("description", api.Description) 100 101 return nil 102 } 103 104 func resourceAwsApiGatewayRestApiUpdateOperations(d *schema.ResourceData) []*apigateway.PatchOperation { 105 operations := make([]*apigateway.PatchOperation, 0) 106 107 if d.HasChange("name") { 108 operations = append(operations, &apigateway.PatchOperation{ 109 Op: aws.String("replace"), 110 Path: aws.String("/name"), 111 Value: aws.String(d.Get("name").(string)), 112 }) 113 } 114 115 if d.HasChange("description") { 116 operations = append(operations, &apigateway.PatchOperation{ 117 Op: aws.String("replace"), 118 Path: aws.String("/description"), 119 Value: aws.String(d.Get("description").(string)), 120 }) 121 } 122 123 return operations 124 } 125 126 func resourceAwsApiGatewayRestApiUpdate(d *schema.ResourceData, meta interface{}) error { 127 conn := meta.(*AWSClient).apigateway 128 log.Printf("[DEBUG] Updating API Gateway %s", d.Id()) 129 130 _, err := conn.UpdateRestApi(&apigateway.UpdateRestApiInput{ 131 RestApiId: aws.String(d.Id()), 132 PatchOperations: resourceAwsApiGatewayRestApiUpdateOperations(d), 133 }) 134 135 if err != nil { 136 return err 137 } 138 log.Printf("[DEBUG] Updated API Gateway %s", d.Id()) 139 140 return resourceAwsApiGatewayRestApiRead(d, meta) 141 } 142 143 func resourceAwsApiGatewayRestApiDelete(d *schema.ResourceData, meta interface{}) error { 144 conn := meta.(*AWSClient).apigateway 145 log.Printf("[DEBUG] Deleting API Gateway: %s", d.Id()) 146 147 return resource.Retry(5*time.Minute, func() *resource.RetryError { 148 _, err := conn.DeleteRestApi(&apigateway.DeleteRestApiInput{ 149 RestApiId: aws.String(d.Id()), 150 }) 151 if err == nil { 152 return nil 153 } 154 155 if apigatewayErr, ok := err.(awserr.Error); ok && apigatewayErr.Code() == "NotFoundException" { 156 return nil 157 } 158 159 return resource.NonRetryableError(err) 160 }) 161 }