github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/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": {
    24  				Type:     schema.TypeString,
    25  				Optional: true,
    26  				Default:  "",
    27  			},
    28  			"caller_reference": {
    29  				Type:     schema.TypeString,
    30  				Computed: true,
    31  			},
    32  			"cloudfront_access_identity_path": {
    33  				Type:     schema.TypeString,
    34  				Computed: true,
    35  			},
    36  			"etag": {
    37  				Type:     schema.TypeString,
    38  				Computed: true,
    39  			},
    40  			"iam_arn": {
    41  				Type:     schema.TypeString,
    42  				Computed: true,
    43  			},
    44  			"s3_canonical_user_id": {
    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:%s:iam::cloudfront:user/CloudFront Origin Access Identity %s",
    85  		meta.(*AWSClient).partition, *resp.CloudFrontOriginAccessIdentity.Id))
    86  	return nil
    87  }
    88  
    89  func resourceAwsCloudFrontOriginAccessIdentityUpdate(d *schema.ResourceData, meta interface{}) error {
    90  	conn := meta.(*AWSClient).cloudfrontconn
    91  	params := &cloudfront.UpdateCloudFrontOriginAccessIdentityInput{
    92  		Id: aws.String(d.Id()),
    93  		CloudFrontOriginAccessIdentityConfig: expandOriginAccessIdentityConfig(d),
    94  		IfMatch: aws.String(d.Get("etag").(string)),
    95  	}
    96  	_, err := conn.UpdateCloudFrontOriginAccessIdentity(params)
    97  	if err != nil {
    98  		return err
    99  	}
   100  
   101  	return resourceAwsCloudFrontOriginAccessIdentityRead(d, meta)
   102  }
   103  
   104  func resourceAwsCloudFrontOriginAccessIdentityDelete(d *schema.ResourceData, meta interface{}) error {
   105  	conn := meta.(*AWSClient).cloudfrontconn
   106  	params := &cloudfront.DeleteCloudFrontOriginAccessIdentityInput{
   107  		Id:      aws.String(d.Id()),
   108  		IfMatch: aws.String(d.Get("etag").(string)),
   109  	}
   110  
   111  	_, err := conn.DeleteCloudFrontOriginAccessIdentity(params)
   112  	if err != nil {
   113  		return err
   114  	}
   115  
   116  	// Done
   117  	d.SetId("")
   118  	return nil
   119  }
   120  
   121  func expandOriginAccessIdentityConfig(d *schema.ResourceData) *cloudfront.OriginAccessIdentityConfig {
   122  	originAccessIdentityConfig := &cloudfront.OriginAccessIdentityConfig{
   123  		Comment: aws.String(d.Get("comment").(string)),
   124  	}
   125  	// This sets CallerReference if it's still pending computation (ie: new resource)
   126  	if v, ok := d.GetOk("caller_reference"); ok == false {
   127  		originAccessIdentityConfig.CallerReference = aws.String(time.Now().Format(time.RFC3339Nano))
   128  	} else {
   129  		originAccessIdentityConfig.CallerReference = aws.String(v.(string))
   130  	}
   131  	return originAccessIdentityConfig
   132  }
   133  
   134  func flattenOriginAccessIdentityConfig(d *schema.ResourceData, originAccessIdentityConfig *cloudfront.OriginAccessIdentityConfig) {
   135  	if originAccessIdentityConfig.Comment != nil {
   136  		d.Set("comment", originAccessIdentityConfig.Comment)
   137  	}
   138  	d.Set("caller_reference", originAccessIdentityConfig.CallerReference)
   139  }