provider/aws: fix force_delete on ASGs
The `ForceDelete` parameter was getting sent to the upstream API call, but only after we had already finished draining instances from Terraform, so it was a moot point by then. This fixes that by skipping the drain when force_delete is true, and it also simplifies the field config a bit: * set a default of false to simplify the logic * remove `ForceNew` since there's no need to replace the resource to flip this value * pull a detail comment from code into the docs
This commit is contained in:
parent
8df9d706fb
commit
a811a72f11
|
@ -73,8 +73,7 @@ func resourceAwsAutoscalingGroup() *schema.Resource {
|
|||
"force_delete": &schema.Schema{
|
||||
Type: schema.TypeBool,
|
||||
Optional: true,
|
||||
Computed: true,
|
||||
ForceNew: true,
|
||||
Default: false,
|
||||
},
|
||||
|
||||
"health_check_grace_period": &schema.Schema{
|
||||
|
@ -334,15 +333,9 @@ func resourceAwsAutoscalingGroupDelete(d *schema.ResourceData, meta interface{})
|
|||
}
|
||||
|
||||
log.Printf("[DEBUG] AutoScaling Group destroy: %v", d.Id())
|
||||
deleteopts := autoscaling.DeleteAutoScalingGroupInput{AutoScalingGroupName: aws.String(d.Id())}
|
||||
|
||||
// You can force an autoscaling group to delete
|
||||
// even if it's in the process of scaling a resource.
|
||||
// Normally, you would set the min-size and max-size to 0,0
|
||||
// and then delete the group. This bypasses that and leaves
|
||||
// resources potentially dangling.
|
||||
if d.Get("force_delete").(bool) {
|
||||
deleteopts.ForceDelete = aws.Bool(true)
|
||||
deleteopts := autoscaling.DeleteAutoScalingGroupInput{
|
||||
AutoScalingGroupName: aws.String(d.Id()),
|
||||
ForceDelete: aws.Bool(d.Get("force_delete").(bool)),
|
||||
}
|
||||
|
||||
// We retry the delete operation to handle InUse/InProgress errors coming
|
||||
|
@ -414,6 +407,11 @@ func getAwsAutoscalingGroup(
|
|||
func resourceAwsAutoscalingGroupDrain(d *schema.ResourceData, meta interface{}) error {
|
||||
conn := meta.(*AWSClient).autoscalingconn
|
||||
|
||||
if d.Get("force_delete").(bool) {
|
||||
log.Printf("[DEBUG] Skipping ASG drain, force_delete was set.")
|
||||
return nil
|
||||
}
|
||||
|
||||
// First, set the capacity to zero so the group will drain
|
||||
log.Printf("[DEBUG] Reducing autoscaling group capacity to zero")
|
||||
opts := autoscaling.UpdateAutoScalingGroupInput{
|
||||
|
|
|
@ -57,7 +57,10 @@ The following arguments are supported:
|
|||
for this number of healthy instances all attached load balancers.
|
||||
(See also [Waiting for Capacity](#waiting-for-capacity) below.)
|
||||
* `force_delete` - (Optional) Allows deleting the autoscaling group without waiting
|
||||
for all instances in the pool to terminate.
|
||||
for all instances in the pool to terminate. You can force an autoscaling group to delete
|
||||
even if it's in the process of scaling a resource. Normally, Terraform
|
||||
drains all the instances before deleting the group. This bypasses that
|
||||
behavior and potentially leaves resources dangling.
|
||||
* `load_balancers` (Optional) A list of load balancer names to add to the autoscaling
|
||||
group names.
|
||||
* `vpc_zone_identifier` (Optional) A list of subnet IDs to launch resources in.
|
||||
|
|
Loading…
Reference in New Issue