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  }