github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/aws/resource_aws_autoscaling_attachment.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/aws/aws-sdk-go/aws" 8 "github.com/aws/aws-sdk-go/service/autoscaling" 9 "github.com/hashicorp/errwrap" 10 "github.com/hashicorp/terraform/helper/resource" 11 "github.com/hashicorp/terraform/helper/schema" 12 ) 13 14 func resourceAwsAutoscalingAttachment() *schema.Resource { 15 return &schema.Resource{ 16 Create: resourceAwsAutoscalingAttachmentCreate, 17 Read: resourceAwsAutoscalingAttachmentRead, 18 Delete: resourceAwsAutoscalingAttachmentDelete, 19 20 Schema: map[string]*schema.Schema{ 21 "autoscaling_group_name": &schema.Schema{ 22 Type: schema.TypeString, 23 ForceNew: true, 24 Required: true, 25 }, 26 27 "elb": &schema.Schema{ 28 Type: schema.TypeString, 29 ForceNew: true, 30 Required: true, 31 }, 32 }, 33 } 34 } 35 36 func resourceAwsAutoscalingAttachmentCreate(d *schema.ResourceData, meta interface{}) error { 37 asgconn := meta.(*AWSClient).autoscalingconn 38 asgName := d.Get("autoscaling_group_name").(string) 39 elbName := d.Get("elb").(string) 40 41 attachElbInput := &autoscaling.AttachLoadBalancersInput{ 42 AutoScalingGroupName: aws.String(asgName), 43 LoadBalancerNames: []*string{aws.String(elbName)}, 44 } 45 46 log.Printf("[INFO] registering asg %s with ELBs %s", asgName, elbName) 47 48 if _, err := asgconn.AttachLoadBalancers(attachElbInput); err != nil { 49 return errwrap.Wrapf(fmt.Sprintf("Failure attaching AutoScaling Group %s with Elastic Load Balancer: %s: {{err}}", asgName, elbName), err) 50 } 51 52 d.SetId(resource.PrefixedUniqueId(fmt.Sprintf("%s-", asgName))) 53 54 return resourceAwsAutoscalingAttachmentRead(d, meta) 55 } 56 57 func resourceAwsAutoscalingAttachmentRead(d *schema.ResourceData, meta interface{}) error { 58 asgconn := meta.(*AWSClient).autoscalingconn 59 asgName := d.Get("autoscaling_group_name").(string) 60 elbName := d.Get("elb").(string) 61 62 // Retrieve the ASG properites to get list of associated ELBs 63 asg, err := getAwsAutoscalingGroup(asgName, asgconn) 64 65 if err != nil { 66 return err 67 } 68 if asg == nil { 69 log.Printf("[INFO] Autoscaling Group %q not found", asgName) 70 d.SetId("") 71 return nil 72 } 73 74 found := false 75 for _, i := range asg.LoadBalancerNames { 76 if elbName == *i { 77 d.Set("elb", elbName) 78 found = true 79 break 80 } 81 } 82 83 if !found { 84 log.Printf("[WARN] Association for %s was not found in ASG assocation", elbName) 85 d.SetId("") 86 } 87 88 return nil 89 } 90 91 func resourceAwsAutoscalingAttachmentDelete(d *schema.ResourceData, meta interface{}) error { 92 asgconn := meta.(*AWSClient).autoscalingconn 93 asgName := d.Get("autoscaling_group_name").(string) 94 elbName := d.Get("elb").(string) 95 96 log.Printf("[INFO] Deleting ELB %s association from: %s", elbName, asgName) 97 98 detachOpts := &autoscaling.DetachLoadBalancersInput{ 99 AutoScalingGroupName: aws.String(asgName), 100 LoadBalancerNames: []*string{aws.String(elbName)}, 101 } 102 103 if _, err := asgconn.DetachLoadBalancers(detachOpts); err != nil { 104 return errwrap.Wrapf(fmt.Sprintf("Failure detaching AutoScaling Group %s with Elastic Load Balancer: %s: {{err}}", asgName, elbName), err) 105 } 106 107 return nil 108 }