func resourceAwsAutoscalingGroupUpdate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).autoscalingconn shouldWaitForCapacity := false opts := autoscaling.UpdateAutoScalingGroupInput{ AutoScalingGroupName: aws.String(d.Id()), } if d.HasChange("default_cooldown") { opts.DefaultCooldown = aws.Int64(int64(d.Get("default_cooldown").(int))) } if d.HasChange("desired_capacity") { opts.DesiredCapacity = aws.Int64(int64(d.Get("desired_capacity").(int))) shouldWaitForCapacity = true } if d.HasChange("launch_configuration") { opts.LaunchConfigurationName = aws.String(d.Get("launch_configuration").(string)) } if d.HasChange("min_size") { opts.MinSize = aws.Int64(int64(d.Get("min_size").(int))) shouldWaitForCapacity = true } if d.HasChange("max_size") { opts.MaxSize = aws.Int64(int64(d.Get("max_size").(int))) } if d.HasChange("health_check_grace_period") { opts.HealthCheckGracePeriod = aws.Int64(int64(d.Get("health_check_grace_period").(int))) } if d.HasChange("health_check_type") { opts.HealthCheckGracePeriod = aws.Int64(int64(d.Get("health_check_grace_period").(int))) opts.HealthCheckType = aws.String(d.Get("health_check_type").(string)) } if d.HasChange("vpc_zone_identifier") { opts.VPCZoneIdentifier = expandVpcZoneIdentifiers(d.Get("vpc_zone_identifier").(*schema.Set).List()) } if d.HasChange("availability_zones") { if v, ok := d.GetOk("availability_zones"); ok && v.(*schema.Set).Len() > 0 { opts.AvailabilityZones = expandStringList(v.(*schema.Set).List()) } } if d.HasChange("placement_group") { opts.PlacementGroup = aws.String(d.Get("placement_group").(string)) } if d.HasChange("termination_policies") { // If the termination policy is set to null, we need to explicitly set // it back to "Default", or the API won't reset it for us. if v, ok := d.GetOk("termination_policies"); ok && len(v.([]interface{})) > 0 { opts.TerminationPolicies = expandStringList(v.([]interface{})) } else { log.Printf("[DEBUG] Explictly setting null termination policy to 'Default'") opts.TerminationPolicies = aws.StringSlice([]string{"Default"}) } } if err := setAutoscalingTags(conn, d); err != nil { return err } else { d.SetPartial("tag") } log.Printf("[DEBUG] AutoScaling Group update configuration: %#v", opts) _, err := conn.UpdateAutoScalingGroup(&opts) if err != nil { d.Partial(true) return fmt.Errorf("Error updating Autoscaling group: %s", err) } if d.HasChange("load_balancers") { o, n := d.GetChange("load_balancers") if o == nil { o = new(schema.Set) } if n == nil { n = new(schema.Set) } os := o.(*schema.Set) ns := n.(*schema.Set) remove := expandStringList(os.Difference(ns).List()) add := expandStringList(ns.Difference(os).List()) if len(remove) > 0 { _, err := conn.DetachLoadBalancers(&autoscaling.DetachLoadBalancersInput{ AutoScalingGroupName: aws.String(d.Id()), LoadBalancerNames: remove, }) if err != nil { return fmt.Errorf("[WARN] Error updating Load Balancers for AutoScaling Group (%s), error: %s", d.Id(), err) } } if len(add) > 0 { _, err := conn.AttachLoadBalancers(&autoscaling.AttachLoadBalancersInput{ AutoScalingGroupName: aws.String(d.Id()), LoadBalancerNames: add, }) if err != nil { return fmt.Errorf("[WARN] Error updating Load Balancers for AutoScaling Group (%s), error: %s", d.Id(), err) } } } if shouldWaitForCapacity { waitForASGCapacity(d, meta, capacitySatifiedUpdate) } if d.HasChange("enabled_metrics") { updateASGMetricsCollection(d, conn) } return resourceAwsAutoscalingGroupRead(d, meta) }
func resourceAwsAutoscalingGroupUpdate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).autoscalingconn opts := autoscaling.UpdateAutoScalingGroupInput{ AutoScalingGroupName: aws.String(d.Id()), } if d.HasChange("default_cooldown") { opts.DefaultCooldown = aws.Long(int64(d.Get("default_cooldown").(int))) } if d.HasChange("desired_capacity") { opts.DesiredCapacity = aws.Long(int64(d.Get("desired_capacity").(int))) } if d.HasChange("launch_configuration") { opts.LaunchConfigurationName = aws.String(d.Get("launch_configuration").(string)) } if d.HasChange("min_size") { opts.MinSize = aws.Long(int64(d.Get("min_size").(int))) } if d.HasChange("max_size") { opts.MaxSize = aws.Long(int64(d.Get("max_size").(int))) } if d.HasChange("health_check_grace_period") { opts.HealthCheckGracePeriod = aws.Long(int64(d.Get("health_check_grace_period").(int))) } if d.HasChange("health_check_type") { opts.HealthCheckGracePeriod = aws.Long(int64(d.Get("health_check_grace_period").(int))) opts.HealthCheckType = aws.String(d.Get("health_check_type").(string)) } if err := setAutoscalingTags(conn, d); err != nil { return err } else { d.SetPartial("tag") } log.Printf("[DEBUG] AutoScaling Group update configuration: %#v", opts) _, err := conn.UpdateAutoScalingGroup(&opts) if err != nil { d.Partial(true) return fmt.Errorf("Error updating Autoscaling group: %s", err) } if d.HasChange("load_balancers") { o, n := d.GetChange("load_balancers") if o == nil { o = new(schema.Set) } if n == nil { n = new(schema.Set) } os := o.(*schema.Set) ns := n.(*schema.Set) remove := expandStringList(os.Difference(ns).List()) add := expandStringList(ns.Difference(os).List()) if len(remove) > 0 { _, err := conn.DetachLoadBalancers(&autoscaling.DetachLoadBalancersInput{ AutoScalingGroupName: aws.String(d.Id()), LoadBalancerNames: remove, }) if err != nil { return fmt.Errorf("[WARN] Error updating Load Balancers for AutoScaling Group (%s), error: %s", d.Id(), err) } } if len(add) > 0 { _, err := conn.AttachLoadBalancers(&autoscaling.AttachLoadBalancersInput{ AutoScalingGroupName: aws.String(d.Id()), LoadBalancerNames: add, }) if err != nil { return fmt.Errorf("[WARN] Error updating Load Balancers for AutoScaling Group (%s), error: %s", d.Id(), err) } } } return resourceAwsAutoscalingGroupRead(d, meta) }
func resourceAwsAutoscalingGroupUpdate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).autoscalingconn opts := autoscaling.UpdateAutoScalingGroupInput{ AutoScalingGroupName: aws.String(d.Id()), } if d.HasChange("default_cooldown") { opts.DefaultCooldown = aws.Int64(int64(d.Get("default_cooldown").(int))) } if d.HasChange("desired_capacity") { opts.DesiredCapacity = aws.Int64(int64(d.Get("desired_capacity").(int))) } if d.HasChange("launch_configuration") { opts.LaunchConfigurationName = aws.String(d.Get("launch_configuration").(string)) } if d.HasChange("min_size") { opts.MinSize = aws.Int64(int64(d.Get("min_size").(int))) } if d.HasChange("max_size") { opts.MaxSize = aws.Int64(int64(d.Get("max_size").(int))) } if d.HasChange("health_check_grace_period") { opts.HealthCheckGracePeriod = aws.Int64(int64(d.Get("health_check_grace_period").(int))) } if d.HasChange("health_check_type") { opts.HealthCheckGracePeriod = aws.Int64(int64(d.Get("health_check_grace_period").(int))) opts.HealthCheckType = aws.String(d.Get("health_check_type").(string)) } if d.HasChange("vpc_zone_identifier") { opts.VPCZoneIdentifier = expandVpcZoneIdentifiers(d.Get("vpc_zone_identifier").(*schema.Set).List()) } if d.HasChange("availability_zones") { if v, ok := d.GetOk("availability_zones"); ok && v.(*schema.Set).Len() > 0 { opts.AvailabilityZones = expandStringList(d.Get("availability_zones").(*schema.Set).List()) } } if d.HasChange("placement_group") { opts.PlacementGroup = aws.String(d.Get("placement_group").(string)) } if d.HasChange("termination_policies") { // If the termination policy is set to null, we need to explicitly set // it back to "Default", or the API won't reset it for us. // This means GetOk() will fail us on the zero check. v := d.Get("termination_policies") if len(v.([]interface{})) > 0 { opts.TerminationPolicies = expandStringList(v.([]interface{})) } else { // Policies is a slice of string pointers, so build one. // Maybe there's a better idiom for this? log.Printf("[DEBUG] Explictly setting null termination policy to 'Default'") pol := "Default" s := make([]*string, 1, 1) s[0] = &pol opts.TerminationPolicies = s } } if err := setAutoscalingTags(conn, d); err != nil { return err } else { d.SetPartial("tag") } log.Printf("[DEBUG] AutoScaling Group update configuration: %#v", opts) _, err := conn.UpdateAutoScalingGroup(&opts) if err != nil { d.Partial(true) return fmt.Errorf("Error updating Autoscaling group: %s", err) } if d.HasChange("load_balancers") { o, n := d.GetChange("load_balancers") if o == nil { o = new(schema.Set) } if n == nil { n = new(schema.Set) } os := o.(*schema.Set) ns := n.(*schema.Set) remove := expandStringList(os.Difference(ns).List()) add := expandStringList(ns.Difference(os).List()) if len(remove) > 0 { _, err := conn.DetachLoadBalancers(&autoscaling.DetachLoadBalancersInput{ AutoScalingGroupName: aws.String(d.Id()), LoadBalancerNames: remove, }) if err != nil { return fmt.Errorf("[WARN] Error updating Load Balancers for AutoScaling Group (%s), error: %s", d.Id(), err) } } if len(add) > 0 { _, err := conn.AttachLoadBalancers(&autoscaling.AttachLoadBalancersInput{ AutoScalingGroupName: aws.String(d.Id()), LoadBalancerNames: add, }) if err != nil { return fmt.Errorf("[WARN] Error updating Load Balancers for AutoScaling Group (%s), error: %s", d.Id(), err) } } } return resourceAwsAutoscalingGroupRead(d, meta) }