github.com/mohanarpit/terraform@v0.6.16-0.20160909104007-291f29853544/builtin/providers/aws/resource_aws_api_gateway_domain_name.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 resourceAwsApiGatewayDomainName() *schema.Resource { 16 return &schema.Resource{ 17 Create: resourceAwsApiGatewayDomainNameCreate, 18 Read: resourceAwsApiGatewayDomainNameRead, 19 Update: resourceAwsApiGatewayDomainNameUpdate, 20 Delete: resourceAwsApiGatewayDomainNameDelete, 21 22 Schema: map[string]*schema.Schema{ 23 24 "certificate_body": &schema.Schema{ 25 Type: schema.TypeString, 26 Required: true, 27 }, 28 29 "certificate_chain": &schema.Schema{ 30 Type: schema.TypeString, 31 Required: true, 32 }, 33 34 "certificate_name": &schema.Schema{ 35 Type: schema.TypeString, 36 Required: true, 37 }, 38 39 "certificate_private_key": &schema.Schema{ 40 Type: schema.TypeString, 41 Required: true, 42 }, 43 44 "domain_name": &schema.Schema{ 45 Type: schema.TypeString, 46 Required: true, 47 ForceNew: true, 48 }, 49 50 "cloudfront_domain_name": &schema.Schema{ 51 Type: schema.TypeString, 52 Computed: true, 53 }, 54 55 "cloudfront_zone_id": &schema.Schema{ 56 Type: schema.TypeString, 57 Computed: true, 58 }, 59 }, 60 } 61 } 62 63 func resourceAwsApiGatewayDomainNameCreate(d *schema.ResourceData, meta interface{}) error { 64 conn := meta.(*AWSClient).apigateway 65 log.Printf("[DEBUG] Creating API Gateway Domain Name") 66 67 domainName, err := conn.CreateDomainName(&apigateway.CreateDomainNameInput{ 68 CertificateBody: aws.String(d.Get("certificate_body").(string)), 69 CertificateChain: aws.String(d.Get("certificate_chain").(string)), 70 CertificateName: aws.String(d.Get("certificate_name").(string)), 71 CertificatePrivateKey: aws.String(d.Get("certificate_private_key").(string)), 72 DomainName: aws.String(d.Get("domain_name").(string)), 73 }) 74 if err != nil { 75 return fmt.Errorf("Error creating API Gateway Domain Name: %s", err) 76 } 77 78 d.SetId(*domainName.DomainName) 79 d.Set("cloudfront_domain_name", domainName.DistributionDomainName) 80 d.Set("cloudfront_zone_id", cloudFrontRoute53ZoneID) 81 82 return resourceAwsApiGatewayDomainNameRead(d, meta) 83 } 84 85 func resourceAwsApiGatewayDomainNameRead(d *schema.ResourceData, meta interface{}) error { 86 conn := meta.(*AWSClient).apigateway 87 log.Printf("[DEBUG] Reading API Gateway Domain Name %s", d.Id()) 88 89 domainName, err := conn.GetDomainName(&apigateway.GetDomainNameInput{ 90 DomainName: aws.String(d.Id()), 91 }) 92 if err != nil { 93 if awsErr, ok := err.(awserr.Error); ok && awsErr.Code() == "NotFoundException" { 94 log.Printf("[WARN] API gateway domain name %s has vanished\n", d.Id()) 95 d.SetId("") 96 return nil 97 } 98 99 return err 100 } 101 102 d.Set("certificate_name", domainName.CertificateName) 103 d.Set("certificate_upload_date", domainName.CertificateUploadDate) 104 d.Set("cloudfront_domain_name", domainName.DistributionDomainName) 105 d.Set("domain_name", domainName.DomainName) 106 107 return nil 108 } 109 110 func resourceAwsApiGatewayDomainNameUpdateOperations(d *schema.ResourceData) []*apigateway.PatchOperation { 111 operations := make([]*apigateway.PatchOperation, 0) 112 113 if d.HasChange("certificate_body") { 114 operations = append(operations, &apigateway.PatchOperation{ 115 Op: aws.String("replace"), 116 Path: aws.String("/certificate_body"), 117 Value: aws.String(d.Get("certificate_body").(string)), 118 }) 119 } 120 121 if d.HasChange("certificate_chain") { 122 operations = append(operations, &apigateway.PatchOperation{ 123 Op: aws.String("replace"), 124 Path: aws.String("/certificate_chain"), 125 Value: aws.String(d.Get("certificate_chain").(string)), 126 }) 127 } 128 129 if d.HasChange("certificate_name") { 130 operations = append(operations, &apigateway.PatchOperation{ 131 Op: aws.String("replace"), 132 Path: aws.String("/certificate_name"), 133 Value: aws.String(d.Get("certificate_name").(string)), 134 }) 135 } 136 137 if d.HasChange("certificate_private_key") { 138 operations = append(operations, &apigateway.PatchOperation{ 139 Op: aws.String("replace"), 140 Path: aws.String("/certificate_private_key"), 141 Value: aws.String(d.Get("certificate_private_key").(string)), 142 }) 143 } 144 145 return operations 146 } 147 148 func resourceAwsApiGatewayDomainNameUpdate(d *schema.ResourceData, meta interface{}) error { 149 conn := meta.(*AWSClient).apigateway 150 log.Printf("[DEBUG] Updating API Gateway Domain Name %s", d.Id()) 151 152 _, err := conn.UpdateDomainName(&apigateway.UpdateDomainNameInput{ 153 DomainName: aws.String(d.Id()), 154 PatchOperations: resourceAwsApiGatewayDomainNameUpdateOperations(d), 155 }) 156 if err != nil { 157 return err 158 } 159 160 return resourceAwsApiGatewayDomainNameRead(d, meta) 161 } 162 163 func resourceAwsApiGatewayDomainNameDelete(d *schema.ResourceData, meta interface{}) error { 164 conn := meta.(*AWSClient).apigateway 165 log.Printf("[DEBUG] Deleting API Gateway Domain Name: %s", d.Id()) 166 167 return resource.Retry(5*time.Minute, func() *resource.RetryError { 168 _, err := conn.DeleteDomainName(&apigateway.DeleteDomainNameInput{ 169 DomainName: aws.String(d.Id()), 170 }) 171 172 if err == nil { 173 return nil 174 } 175 176 if apigatewayErr, ok := err.(awserr.Error); ok && apigatewayErr.Code() == "NotFoundException" { 177 return nil 178 } 179 180 return resource.NonRetryableError(err) 181 }) 182 }