github.com/ndarilek/terraform@v0.3.8-0.20150320140257-d3135c1b2bac/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  		Delete: resourceAwsS3BucketDelete,
    18  
    19  		Schema: map[string]*schema.Schema{
    20  			"bucket": &schema.Schema{
    21  				Type:     schema.TypeString,
    22  				Required: true,
    23  				ForceNew: true,
    24  			},
    25  
    26  			"acl": &schema.Schema{
    27  				Type:     schema.TypeString,
    28  				Default:  "private",
    29  				Optional: true,
    30  				ForceNew: true,
    31  			},
    32  		},
    33  	}
    34  }
    35  
    36  func resourceAwsS3BucketCreate(d *schema.ResourceData, meta interface{}) error {
    37  	s3conn := meta.(*AWSClient).s3conn
    38  	awsRegion := meta.(*AWSClient).region
    39  
    40  	// Get the bucket and acl
    41  	bucket := d.Get("bucket").(string)
    42  	acl := d.Get("acl").(string)
    43  
    44  	log.Printf("[DEBUG] S3 bucket create: %s, ACL: %s", bucket, acl)
    45  
    46  	req := &s3.CreateBucketRequest{
    47  		Bucket: aws.String(bucket),
    48  		ACL:    aws.String(acl),
    49  	}
    50  
    51  	// Special case us-east-1 region and do not set the LocationConstraint.
    52  	// See "Request Elements: http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUT.html
    53  	if awsRegion != "us-east-1" {
    54  		req.CreateBucketConfiguration = &s3.CreateBucketConfiguration{
    55  			LocationConstraint: aws.String(awsRegion),
    56  		}
    57  	}
    58  
    59  	_, err := s3conn.CreateBucket(req)
    60  	if err != nil {
    61  		return fmt.Errorf("Error creating S3 bucket: %s", err)
    62  	}
    63  
    64  	// Assign the bucket name as the resource ID
    65  	d.SetId(bucket)
    66  
    67  	return nil
    68  }
    69  
    70  func resourceAwsS3BucketRead(d *schema.ResourceData, meta interface{}) error {
    71  	s3conn := meta.(*AWSClient).s3conn
    72  
    73  	err := s3conn.HeadBucket(&s3.HeadBucketRequest{
    74  		Bucket: aws.String(d.Id()),
    75  	})
    76  	if err != nil {
    77  		return err
    78  	}
    79  	return nil
    80  }
    81  
    82  func resourceAwsS3BucketDelete(d *schema.ResourceData, meta interface{}) error {
    83  	s3conn := meta.(*AWSClient).s3conn
    84  
    85  	log.Printf("[DEBUG] S3 Delete Bucket: %s", d.Id())
    86  	err := s3conn.DeleteBucket(&s3.DeleteBucketRequest{
    87  		Bucket: aws.String(d.Id()),
    88  	})
    89  	if err != nil {
    90  		return err
    91  	}
    92  	return nil
    93  }