github.com/bengesoff/terraform@v0.3.1-0.20141018223233-b25a53629922/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/config" 8 "github.com/hashicorp/terraform/helper/diff" 9 "github.com/hashicorp/terraform/terraform" 10 "github.com/mitchellh/goamz/s3" 11 ) 12 13 func resource_aws_s3_bucket_validation() *config.Validator { 14 return &config.Validator{ 15 Required: []string{ 16 "bucket", 17 }, 18 Optional: []string{ 19 "acl", 20 }, 21 } 22 } 23 24 func resource_aws_s3_bucket_create( 25 s *terraform.InstanceState, 26 d *terraform.InstanceDiff, 27 meta interface{}) (*terraform.InstanceState, error) { 28 p := meta.(*ResourceProvider) 29 s3conn := p.s3conn 30 31 // Merge the diff into the state so that we have all the attributes 32 // properly. 33 rs := s.MergeDiff(d) 34 35 // Get the bucket and optional acl 36 bucket := rs.Attributes["bucket"] 37 acl := "private" 38 if other, ok := rs.Attributes["acl"]; ok { 39 acl = other 40 } 41 42 log.Printf("[DEBUG] S3 bucket create: %s, ACL: %s", bucket, acl) 43 s3Bucket := s3conn.Bucket(bucket) 44 err := s3Bucket.PutBucket(s3.ACL(acl)) 45 if err != nil { 46 return nil, fmt.Errorf("Error creating S3 bucket: %s", err) 47 } 48 49 // Assign the bucket name as the resource ID 50 rs.ID = bucket 51 return rs, nil 52 } 53 54 func resource_aws_s3_bucket_destroy( 55 s *terraform.InstanceState, 56 meta interface{}) error { 57 p := meta.(*ResourceProvider) 58 s3conn := p.s3conn 59 60 name := s.Attributes["bucket"] 61 bucket := s3conn.Bucket(name) 62 63 log.Printf("[DEBUG] S3 Delete Bucket: %s", name) 64 return bucket.DelBucket() 65 } 66 67 func resource_aws_s3_bucket_refresh( 68 s *terraform.InstanceState, 69 meta interface{}) (*terraform.InstanceState, error) { 70 p := meta.(*ResourceProvider) 71 s3conn := p.s3conn 72 73 bucket := s3conn.Bucket(s.Attributes["bucket"]) 74 resp, err := bucket.Head("/") 75 if err != nil { 76 return s, err 77 } 78 defer resp.Body.Close() 79 return s, nil 80 } 81 82 func resource_aws_s3_bucket_diff( 83 s *terraform.InstanceState, 84 c *terraform.ResourceConfig, 85 meta interface{}) (*terraform.InstanceDiff, error) { 86 87 b := &diff.ResourceBuilder{ 88 Attrs: map[string]diff.AttrType{ 89 "bucket": diff.AttrTypeCreate, 90 }, 91 } 92 return b.Diff(s, c) 93 }