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 }