github.com/recobe182/terraform@v0.8.5-0.20170117231232-49ab22a935b7/builtin/providers/aws/resource_aws_cloudfront_origin_access_identity.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/aws/aws-sdk-go/aws" 8 "github.com/aws/aws-sdk-go/service/cloudfront" 9 "github.com/hashicorp/terraform/helper/schema" 10 ) 11 12 func resourceAwsCloudFrontOriginAccessIdentity() *schema.Resource { 13 return &schema.Resource{ 14 Create: resourceAwsCloudFrontOriginAccessIdentityCreate, 15 Read: resourceAwsCloudFrontOriginAccessIdentityRead, 16 Update: resourceAwsCloudFrontOriginAccessIdentityUpdate, 17 Delete: resourceAwsCloudFrontOriginAccessIdentityDelete, 18 Importer: &schema.ResourceImporter{ 19 State: schema.ImportStatePassthrough, 20 }, 21 22 Schema: map[string]*schema.Schema{ 23 "comment": &schema.Schema{ 24 Type: schema.TypeString, 25 Optional: true, 26 Default: "", 27 }, 28 "caller_reference": &schema.Schema{ 29 Type: schema.TypeString, 30 Computed: true, 31 }, 32 "cloudfront_access_identity_path": &schema.Schema{ 33 Type: schema.TypeString, 34 Computed: true, 35 }, 36 "etag": &schema.Schema{ 37 Type: schema.TypeString, 38 Computed: true, 39 }, 40 "iam_arn": &schema.Schema{ 41 Type: schema.TypeString, 42 Computed: true, 43 }, 44 "s3_canonical_user_id": &schema.Schema{ 45 Type: schema.TypeString, 46 Computed: true, 47 }, 48 }, 49 } 50 } 51 52 func resourceAwsCloudFrontOriginAccessIdentityCreate(d *schema.ResourceData, meta interface{}) error { 53 conn := meta.(*AWSClient).cloudfrontconn 54 params := &cloudfront.CreateCloudFrontOriginAccessIdentityInput{ 55 CloudFrontOriginAccessIdentityConfig: expandOriginAccessIdentityConfig(d), 56 } 57 58 resp, err := conn.CreateCloudFrontOriginAccessIdentity(params) 59 if err != nil { 60 return err 61 } 62 d.SetId(*resp.CloudFrontOriginAccessIdentity.Id) 63 return resourceAwsCloudFrontOriginAccessIdentityRead(d, meta) 64 } 65 66 func resourceAwsCloudFrontOriginAccessIdentityRead(d *schema.ResourceData, meta interface{}) error { 67 conn := meta.(*AWSClient).cloudfrontconn 68 params := &cloudfront.GetCloudFrontOriginAccessIdentityInput{ 69 Id: aws.String(d.Id()), 70 } 71 72 resp, err := conn.GetCloudFrontOriginAccessIdentity(params) 73 if err != nil { 74 return err 75 } 76 77 // Update attributes from DistributionConfig 78 flattenOriginAccessIdentityConfig(d, resp.CloudFrontOriginAccessIdentity.CloudFrontOriginAccessIdentityConfig) 79 // Update other attributes outside of DistributionConfig 80 d.SetId(*resp.CloudFrontOriginAccessIdentity.Id) 81 d.Set("etag", resp.ETag) 82 d.Set("s3_canonical_user_id", resp.CloudFrontOriginAccessIdentity.S3CanonicalUserId) 83 d.Set("cloudfront_access_identity_path", fmt.Sprintf("origin-access-identity/cloudfront/%s", *resp.CloudFrontOriginAccessIdentity.Id)) 84 d.Set("iam_arn", fmt.Sprintf("arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity %s", *resp.CloudFrontOriginAccessIdentity.Id)) 85 return nil 86 } 87 88 func resourceAwsCloudFrontOriginAccessIdentityUpdate(d *schema.ResourceData, meta interface{}) error { 89 conn := meta.(*AWSClient).cloudfrontconn 90 params := &cloudfront.UpdateCloudFrontOriginAccessIdentityInput{ 91 Id: aws.String(d.Id()), 92 CloudFrontOriginAccessIdentityConfig: expandOriginAccessIdentityConfig(d), 93 IfMatch: aws.String(d.Get("etag").(string)), 94 } 95 _, err := conn.UpdateCloudFrontOriginAccessIdentity(params) 96 if err != nil { 97 return err 98 } 99 100 return resourceAwsCloudFrontOriginAccessIdentityRead(d, meta) 101 } 102 103 func resourceAwsCloudFrontOriginAccessIdentityDelete(d *schema.ResourceData, meta interface{}) error { 104 conn := meta.(*AWSClient).cloudfrontconn 105 params := &cloudfront.DeleteCloudFrontOriginAccessIdentityInput{ 106 Id: aws.String(d.Id()), 107 IfMatch: aws.String(d.Get("etag").(string)), 108 } 109 110 _, err := conn.DeleteCloudFrontOriginAccessIdentity(params) 111 if err != nil { 112 return err 113 } 114 115 // Done 116 d.SetId("") 117 return nil 118 } 119 120 func expandOriginAccessIdentityConfig(d *schema.ResourceData) *cloudfront.OriginAccessIdentityConfig { 121 originAccessIdentityConfig := &cloudfront.OriginAccessIdentityConfig{ 122 Comment: aws.String(d.Get("comment").(string)), 123 } 124 // This sets CallerReference if it's still pending computation (ie: new resource) 125 if v, ok := d.GetOk("caller_reference"); ok == false { 126 originAccessIdentityConfig.CallerReference = aws.String(time.Now().Format(time.RFC3339Nano)) 127 } else { 128 originAccessIdentityConfig.CallerReference = aws.String(v.(string)) 129 } 130 return originAccessIdentityConfig 131 } 132 133 func flattenOriginAccessIdentityConfig(d *schema.ResourceData, originAccessIdentityConfig *cloudfront.OriginAccessIdentityConfig) { 134 if originAccessIdentityConfig.Comment != nil { 135 d.Set("comment", originAccessIdentityConfig.Comment) 136 } 137 d.Set("caller_reference", originAccessIdentityConfig.CallerReference) 138 }