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