github.com/econnell/terraform@v0.5.4-0.20150722160631-78eb236786a4/builtin/providers/aws/resource_aws_ecs_cluster.go (about)

     1  package aws
     2  
     3  import (
     4  	"log"
     5  	"time"
     6  
     7  	"github.com/aws/aws-sdk-go/aws"
     8  	"github.com/aws/aws-sdk-go/aws/awserr"
     9  	"github.com/aws/aws-sdk-go/aws/awsutil"
    10  	"github.com/aws/aws-sdk-go/service/ecs"
    11  	"github.com/hashicorp/terraform/helper/resource"
    12  	"github.com/hashicorp/terraform/helper/schema"
    13  )
    14  
    15  func resourceAwsEcsCluster() *schema.Resource {
    16  	return &schema.Resource{
    17  		Create: resourceAwsEcsClusterCreate,
    18  		Read:   resourceAwsEcsClusterRead,
    19  		Delete: resourceAwsEcsClusterDelete,
    20  
    21  		Schema: map[string]*schema.Schema{
    22  			"name": &schema.Schema{
    23  				Type:     schema.TypeString,
    24  				Required: true,
    25  				ForceNew: true,
    26  			},
    27  		},
    28  	}
    29  }
    30  
    31  func resourceAwsEcsClusterCreate(d *schema.ResourceData, meta interface{}) error {
    32  	conn := meta.(*AWSClient).ecsconn
    33  
    34  	clusterName := d.Get("name").(string)
    35  	log.Printf("[DEBUG] Creating ECS cluster %s", clusterName)
    36  
    37  	out, err := conn.CreateCluster(&ecs.CreateClusterInput{
    38  		ClusterName: aws.String(clusterName),
    39  	})
    40  	if err != nil {
    41  		return err
    42  	}
    43  	log.Printf("[DEBUG] ECS cluster %s created", *out.Cluster.ClusterARN)
    44  
    45  	d.SetId(*out.Cluster.ClusterARN)
    46  	d.Set("name", *out.Cluster.ClusterName)
    47  	return nil
    48  }
    49  
    50  func resourceAwsEcsClusterRead(d *schema.ResourceData, meta interface{}) error {
    51  	conn := meta.(*AWSClient).ecsconn
    52  
    53  	clusterName := d.Get("name").(string)
    54  	log.Printf("[DEBUG] Reading ECS cluster %s", clusterName)
    55  	out, err := conn.DescribeClusters(&ecs.DescribeClustersInput{
    56  		Clusters: []*string{aws.String(clusterName)},
    57  	})
    58  	if err != nil {
    59  		return err
    60  	}
    61  	log.Printf("[DEBUG] Received ECS clusters: %s", awsutil.StringValue(out.Clusters))
    62  
    63  	d.SetId(*out.Clusters[0].ClusterARN)
    64  	d.Set("name", *out.Clusters[0].ClusterName)
    65  
    66  	return nil
    67  }
    68  
    69  func resourceAwsEcsClusterDelete(d *schema.ResourceData, meta interface{}) error {
    70  	conn := meta.(*AWSClient).ecsconn
    71  
    72  	log.Printf("[DEBUG] Deleting ECS cluster %s", d.Id())
    73  
    74  	return resource.Retry(10*time.Minute, func() error {
    75  		out, err := conn.DeleteCluster(&ecs.DeleteClusterInput{
    76  			Cluster: aws.String(d.Id()),
    77  		})
    78  
    79  		if err == nil {
    80  			log.Printf("[DEBUG] ECS cluster %s deleted: %s", d.Id(), awsutil.StringValue(out))
    81  			return nil
    82  		}
    83  
    84  		awsErr, ok := err.(awserr.Error)
    85  		if !ok {
    86  			return resource.RetryError{Err: err}
    87  		}
    88  
    89  		if awsErr.Code() == "ClusterContainsContainerInstancesException" {
    90  			log.Printf("[TRACE] Retrying ECS cluster %q deletion after %q", d.Id(), awsErr.Code())
    91  			return err
    92  		}
    93  
    94  		if awsErr.Code() == "ClusterContainsServicesException" {
    95  			log.Printf("[TRACE] Retrying ECS cluster %q deletion after %q", d.Id(), awsErr.Code())
    96  			return err
    97  		}
    98  
    99  		return resource.RetryError{Err: err}
   100  	})
   101  }