github.com/nicgrayson/terraform@v0.4.3-0.20150415203910-c4de50829380/builtin/providers/aws/resource_aws_s3_bucket.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/hashicorp/terraform/helper/schema"
     8  
     9  	"github.com/hashicorp/aws-sdk-go/aws"
    10  	"github.com/hashicorp/aws-sdk-go/gen/s3"
    11  )
    12  
    13  func resourceAwsS3Bucket() *schema.Resource {
    14  	return &schema.Resource{
    15  		Create: resourceAwsS3BucketCreate,
    16  		Read:   resourceAwsS3BucketRead,
    17  		Update: resourceAwsS3BucketUpdate,
    18  		Delete: resourceAwsS3BucketDelete,
    19  
    20  		Schema: map[string]*schema.Schema{
    21  			"bucket": &schema.Schema{
    22  				Type:     schema.TypeString,
    23  				Required: true,
    24  				ForceNew: true,
    25  			},
    26  
    27  			"acl": &schema.Schema{
    28  				Type:     schema.TypeString,
    29  				Default:  "private",
    30  				Optional: true,
    31  				ForceNew: true,
    32  			},
    33  
    34  			"tags": tagsSchema(),
    35  		},
    36  	}
    37  }
    38  
    39  func resourceAwsS3BucketCreate(d *schema.ResourceData, meta interface{}) error {
    40  	s3conn := meta.(*AWSClient).s3conn
    41  	awsRegion := meta.(*AWSClient).region
    42  
    43  	// Get the bucket and acl
    44  	bucket := d.Get("bucket").(string)
    45  	acl := d.Get("acl").(string)
    46  
    47  	log.Printf("[DEBUG] S3 bucket create: %s, ACL: %s", bucket, acl)
    48  
    49  	req := &s3.CreateBucketRequest{
    50  		Bucket: aws.String(bucket),
    51  		ACL:    aws.String(acl),
    52  	}
    53  
    54  	// Special case us-east-1 region and do not set the LocationConstraint.
    55  	// See "Request Elements: http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUT.html
    56  	if awsRegion != "us-east-1" {
    57  		req.CreateBucketConfiguration = &s3.CreateBucketConfiguration{
    58  			LocationConstraint: aws.String(awsRegion),
    59  		}
    60  	}
    61  
    62  	_, err := s3conn.CreateBucket(req)
    63  	if err != nil {
    64  		return fmt.Errorf("Error creating S3 bucket: %s", err)
    65  	}
    66  
    67  	// Assign the bucket name as the resource ID
    68  	d.SetId(bucket)
    69  
    70  	return resourceAwsS3BucketUpdate(d, meta)
    71  }
    72  
    73  func resourceAwsS3BucketUpdate(d *schema.ResourceData, meta interface{}) error {
    74  	s3conn := meta.(*AWSClient).s3conn
    75  	if err := setTagsS3(s3conn, d); err != nil {
    76  		return err
    77  	}
    78  	return resourceAwsS3BucketRead(d, meta)
    79  }
    80  
    81  func resourceAwsS3BucketRead(d *schema.ResourceData, meta interface{}) error {
    82  	s3conn := meta.(*AWSClient).s3conn
    83  
    84  	err := s3conn.HeadBucket(&s3.HeadBucketRequest{
    85  		Bucket: aws.String(d.Id()),
    86  	})
    87  	if err != nil {
    88  		return err
    89  	}
    90  
    91  	tagSet, err := getTagSetS3(s3conn, d.Id())
    92  	if err != nil {
    93  		return err
    94  	}
    95  
    96  	if err := d.Set("tags", tagsToMapS3(tagSet)); err != nil {
    97  		return err
    98  	}
    99  
   100  	return nil
   101  }
   102  
   103  func resourceAwsS3BucketDelete(d *schema.ResourceData, meta interface{}) error {
   104  	s3conn := meta.(*AWSClient).s3conn
   105  
   106  	log.Printf("[DEBUG] S3 Delete Bucket: %s", d.Id())
   107  	err := s3conn.DeleteBucket(&s3.DeleteBucketRequest{
   108  		Bucket: aws.String(d.Id()),
   109  	})
   110  	if err != nil {
   111  		return err
   112  	}
   113  	return nil
   114  }