Merge pull request #3191 from hashicorp/f-asg-wait-config
provider/aws: configurable capacity waiting duration
This commit is contained in:
commit
5f6c03f515
|
@ -119,6 +119,25 @@ func resourceAwsAutoscalingGroup() *schema.Resource {
|
|||
Set: schema.HashString,
|
||||
},
|
||||
|
||||
"wait_for_capacity_timeout": &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
Default: "10m",
|
||||
ValidateFunc: func(v interface{}, k string) (ws []string, errors []error) {
|
||||
value := v.(string)
|
||||
duration, err := time.ParseDuration(value)
|
||||
if err != nil {
|
||||
errors = append(errors, fmt.Errorf(
|
||||
"%q cannot be parsed as a duration: %s", k, err))
|
||||
}
|
||||
if duration < 0 {
|
||||
errors = append(errors, fmt.Errorf(
|
||||
"%q must be greater than zero", k))
|
||||
}
|
||||
return
|
||||
},
|
||||
},
|
||||
|
||||
"tag": autoscalingTagsSchema(),
|
||||
},
|
||||
}
|
||||
|
@ -443,8 +462,6 @@ func resourceAwsAutoscalingGroupDrain(d *schema.ResourceData, meta interface{})
|
|||
})
|
||||
}
|
||||
|
||||
var waitForASGCapacityTimeout = 10 * time.Minute
|
||||
|
||||
// Waits for a minimum number of healthy instances to show up as healthy in the
|
||||
// ASG before continuing. Waits up to `waitForASGCapacityTimeout` for
|
||||
// "desired_capacity", or "min_size" if desired capacity is not specified.
|
||||
|
@ -459,9 +476,20 @@ func waitForASGCapacity(d *schema.ResourceData, meta interface{}) error {
|
|||
}
|
||||
wantELB := d.Get("min_elb_capacity").(int)
|
||||
|
||||
log.Printf("[DEBUG] Waiting for capacity: %d ASG, %d ELB", wantASG, wantELB)
|
||||
wait, err := time.ParseDuration(d.Get("wait_for_capacity_timeout").(string))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return resource.Retry(waitForASGCapacityTimeout, func() error {
|
||||
if wait == 0 {
|
||||
log.Printf("[DEBUG] Capacity timeout set to 0, skipping capacity waiting.")
|
||||
return nil
|
||||
}
|
||||
|
||||
log.Printf("[DEBUG] Waiting %s for capacity: %d ASG, %d ELB",
|
||||
wait, wantASG, wantELB)
|
||||
|
||||
return resource.Retry(wait, func() error {
|
||||
g, err := getAwsAutoscalingGroup(d, meta)
|
||||
if err != nil {
|
||||
return resource.RetryError{Err: err}
|
||||
|
|
|
@ -66,6 +66,11 @@ The following arguments are supported:
|
|||
* `vpc_zone_identifier` (Optional) A list of subnet IDs to launch resources in.
|
||||
* `termination_policies` (Optional) A list of policies to decide how the instances in the auto scale group should be terminated.
|
||||
* `tag` (Optional) A list of tag blocks. Tags documented below.
|
||||
* `wait_for_capacity_timeout` (Default: "10m") A maximum
|
||||
[duration](https://golang.org/pkg/time/#ParseDuration) that Terraform should
|
||||
wait for ASG instances to be healthy before timing out. (See also [Waiting
|
||||
for Capacity](#waiting-for-capacity) below.) Setting this to "0" causes
|
||||
Terraform to skip all Capacity Waiting behavior.
|
||||
|
||||
Tags support the following:
|
||||
|
||||
|
@ -113,9 +118,12 @@ Terraform considers an instance "healthy" when the ASG reports `HealthStatus:
|
|||
Docs](https://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/AutoScalingGroupLifecycle.html)
|
||||
for more information on an ASG's lifecycle.
|
||||
|
||||
Terraform will wait for healthy instances for up to 10 minutes. If ASG creation
|
||||
is taking more than a few minutes, it's worth investigating for scaling activity
|
||||
errors, which can be caused by problems with the selected Launch Configuration.
|
||||
Terraform will wait for healthy instances for up to
|
||||
`wait_for_capacity_timeout`. If ASG creation is taking more than a few minutes,
|
||||
it's worth investigating for scaling activity errors, which can be caused by
|
||||
problems with the selected Launch Configuration.
|
||||
|
||||
Setting `wait_for_capacity_timeout` to `"0"` disables ASG Capacity waiting.
|
||||
|
||||
#### Waiting for ELB Capacity
|
||||
|
||||
|
@ -124,8 +132,9 @@ Balancers. If `min_elb_capacity` is set, Terraform will wait for that number of
|
|||
Instances to be `"InService"` in all attached `load_balancers`. This can be
|
||||
used to ensure that service is being provided before Terraform moves on.
|
||||
|
||||
As with ASG Capacity, Terraform will wait for up to 10 minutes for
|
||||
`"InService"` instances. If ASG creation takes more than a few minutes, this
|
||||
could indicate one of a number of configuration problems. See the [AWS Docs on
|
||||
Load Balancer Troubleshooting](https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-troubleshooting.html)
|
||||
As with ASG Capacity, Terraform will wait for up to `wait_for_capacity_timeout`
|
||||
(for `"InService"` instances. If ASG creation takes more than a few minutes,
|
||||
this could indicate one of a number of configuration problems. See the [AWS
|
||||
Docs on Load Balancer
|
||||
Troubleshooting](https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-troubleshooting.html)
|
||||
for more information.
|
||||
|
|
Loading…
Reference in New Issue