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 }