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 }