From a2b54a588cea1afa3688a854ec16d68d5af8ecb5 Mon Sep 17 00:00:00 2001 From: apednekar Date: Sat, 9 Sep 2023 01:55:08 +0530 Subject: [PATCH 1/7] Fix: Setting default values 'Ignore' for scale_in_protected_instances and standby_instances --- internal/service/autoscaling/group.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/service/autoscaling/group.go b/internal/service/autoscaling/group.go index 81c7a090acf..80af27286e9 100644 --- a/internal/service/autoscaling/group.go +++ b/internal/service/autoscaling/group.go @@ -211,6 +211,7 @@ func ResourceGroup() *schema.Resource { "scale_in_protected_instances": { Type: schema.TypeString, Optional: true, + Default: "Ignore", ValidateFunc: validation.StringInSlice(autoscaling.ScaleInProtectedInstances_Values(), false), }, "skip_matching": { @@ -221,6 +222,7 @@ func ResourceGroup() *schema.Resource { "standby_instances": { Type: schema.TypeString, Optional: true, + Default: "Ignore", ValidateFunc: validation.StringInSlice(autoscaling.StandbyInstances_Values(), false), }, }, From e97289070774b914c14f5015de85dea277d43768 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 11 Sep 2023 10:23:44 -0400 Subject: [PATCH 2/7] Add CHANGELOG entry. --- .changelog/33382.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/33382.txt diff --git a/.changelog/33382.txt b/.changelog/33382.txt new file mode 100644 index 00000000000..99faaf9171f --- /dev/null +++ b/.changelog/33382.txt @@ -0,0 +1,3 @@ +```release-note:bug +resource/aws_autoscaling_group: Fix `ValidationError` errors when starting Auto Scaling group instance refresh +``` \ No newline at end of file From 982ce8afc2e0a2bbf30d9c4da48341ee364f53fd Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 11 Sep 2023 10:25:41 -0400 Subject: [PATCH 3/7] r/aws_autoscaling_group: Use AWS SDK constants. --- internal/service/autoscaling/group.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/autoscaling/group.go b/internal/service/autoscaling/group.go index 80af27286e9..90e01c8a1cc 100644 --- a/internal/service/autoscaling/group.go +++ b/internal/service/autoscaling/group.go @@ -211,7 +211,7 @@ func ResourceGroup() *schema.Resource { "scale_in_protected_instances": { Type: schema.TypeString, Optional: true, - Default: "Ignore", + Default: autoscaling.ScaleInProtectedInstancesIgnore, ValidateFunc: validation.StringInSlice(autoscaling.ScaleInProtectedInstances_Values(), false), }, "skip_matching": { @@ -222,7 +222,7 @@ func ResourceGroup() *schema.Resource { "standby_instances": { Type: schema.TypeString, Optional: true, - Default: "Ignore", + Default: autoscaling.StandbyInstancesIgnore, ValidateFunc: validation.StringInSlice(autoscaling.StandbyInstances_Values(), false), }, }, From 1a144ab814e0f3345e8f56a7a61fba32e1665eac Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 11 Sep 2023 10:31:38 -0400 Subject: [PATCH 4/7] r/aws_autoscaling_group: Document change of default instance_refresh.preferences values from 'Wait' to 'Ignore'. --- .changelog/33382.txt | 4 ++++ website/docs/r/autoscaling_group.html.markdown | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.changelog/33382.txt b/.changelog/33382.txt index 99faaf9171f..7d68633f217 100644 --- a/.changelog/33382.txt +++ b/.changelog/33382.txt @@ -1,3 +1,7 @@ ```release-note:bug resource/aws_autoscaling_group: Fix `ValidationError` errors when starting Auto Scaling group instance refresh +``` + +```release-note:enhancement +resource/aws_autoscaling_group: Change the default values of `instance_refresh.preferences.scale_in_protected_instances` and `instance_refresh.preferences.standby_instances` from `Wait` to the [Amazon EC2 Auto Scaling console recommended value](https://docs.aws.amazon.com/autoscaling/ec2/userguide/understand-instance-refresh-default-values.html) of `Ignore` ``` \ No newline at end of file diff --git a/website/docs/r/autoscaling_group.html.markdown b/website/docs/r/autoscaling_group.html.markdown index d5cac3caacb..a6be59c699a 100644 --- a/website/docs/r/autoscaling_group.html.markdown +++ b/website/docs/r/autoscaling_group.html.markdown @@ -658,8 +658,8 @@ This configuration block supports the following: - `min_healthy_percentage` - (Optional) Amount of capacity in the Auto Scaling group that must remain healthy during an instance refresh to allow the operation to continue, as a percentage of the desired capacity of the Auto Scaling group. Defaults to `90`. - `skip_matching` - (Optional) Replace instances that already have your desired configuration. Defaults to `false`. - `auto_rollback` - (Optional) Automatically rollback if instance refresh fails. Defaults to `false`. This option may only be set to `true` when specifying a `launch_template` or `mixed_instances_policy`. - - `scale_in_protected_instances` - (Optional) Behavior when encountering instances protected from scale in are found. Available behaviors are `Refresh`, `Ignore`, and `Wait`. Default is `Wait`. - - `standby_instances` - (Optional) Behavior when encountering instances in the `Standby` state in are found. Available behaviors are `Terminate`, `Ignore`, and `Wait`. Default is `Wait`. + - `scale_in_protected_instances` - (Optional) Behavior when encountering instances protected from scale in are found. Available behaviors are `Refresh`, `Ignore`, and `Wait`. Default is `Ignore`. + - `standby_instances` - (Optional) Behavior when encountering instances in the `Standby` state in are found. Available behaviors are `Terminate`, `Ignore`, and `Wait`. Default is `Ignore`. - `triggers` - (Optional) Set of additional property names that will trigger an Instance Refresh. A refresh will always be triggered by a change in any of `launch_configuration`, `launch_template`, or `mixed_instances_policy`. ~> **NOTE:** A refresh is started when any of the following Auto Scaling Group properties change: `launch_configuration`, `launch_template`, `mixed_instances_policy`. Additional properties can be specified in the `triggers` property of `instance_refresh`. From 4cac12ecf278390ed9d9083b055b7788224542b1 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 11 Sep 2023 10:39:50 -0400 Subject: [PATCH 5/7] Enhance 'TestAccAutoScalingGroup_InstanceRefresh_basic'. --- internal/service/autoscaling/group_test.go | 27 ++++++++++++---------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/internal/service/autoscaling/group_test.go b/internal/service/autoscaling/group_test.go index 48856712cbb..8aa6a03b977 100644 --- a/internal/service/autoscaling/group_test.go +++ b/internal/service/autoscaling/group_test.go @@ -1222,9 +1222,9 @@ func TestAccAutoScalingGroup_InstanceRefresh_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.checkpoint_percentages.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.instance_warmup", ""), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.min_healthy_percentage", "0"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", ""), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", "Ignore"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.skip_matching", "false"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", ""), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", "Ignore"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.strategy", "Rolling"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.triggers.#", "0"), ), @@ -1240,9 +1240,9 @@ func TestAccAutoScalingGroup_InstanceRefresh_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.checkpoint_percentages.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.instance_warmup", ""), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.min_healthy_percentage", "0"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", ""), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", "Ignore"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.skip_matching", "true"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", ""), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", "Ignore"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.strategy", "Rolling"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.triggers.#", "0"), ), @@ -1258,9 +1258,9 @@ func TestAccAutoScalingGroup_InstanceRefresh_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.checkpoint_percentages.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.instance_warmup", ""), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.min_healthy_percentage", "0"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", "Ignore"), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", "Wait"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.skip_matching", "false"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", ""), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", "Ignore"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.strategy", "Rolling"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.triggers.#", "0"), ), @@ -1276,9 +1276,9 @@ func TestAccAutoScalingGroup_InstanceRefresh_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.checkpoint_percentages.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.instance_warmup", ""), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.min_healthy_percentage", "0"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", ""), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", "Ignore"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.skip_matching", "false"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", "Ignore"), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", "Wait"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.strategy", "Rolling"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.triggers.#", "0"), ), @@ -1299,9 +1299,9 @@ func TestAccAutoScalingGroup_InstanceRefresh_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.checkpoint_percentages.4", "100"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.instance_warmup", "10"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.min_healthy_percentage", "50"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", ""), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", "Refresh"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.skip_matching", "false"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", ""), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", "Terminate"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.strategy", "Rolling"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.triggers.#", "0"), ), @@ -4944,7 +4944,7 @@ resource "aws_autoscaling_group" "test" { preferences { min_healthy_percentage = 0 - scale_in_protected_instances = "Ignore" + scale_in_protected_instances = "Wait" } } @@ -4972,7 +4972,7 @@ resource "aws_autoscaling_group" "test" { preferences { min_healthy_percentage = 0 - standby_instances = "Ignore" + standby_instances = "Wait" } } @@ -5035,6 +5035,9 @@ resource "aws_autoscaling_group" "test" { min_healthy_percentage = 50 checkpoint_delay = 25 checkpoint_percentages = [1, 20, 25, 50, 100] + + scale_in_protected_instances = "Refresh" + standby_instances = "Terminate" } } From 57c8183aa194e1166e52319872fde84cad7b5906 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 11 Sep 2023 10:40:56 -0400 Subject: [PATCH 6/7] Enhance 'TestAccAutoScalingGroup_InstanceRefresh_autoRollback'. --- internal/service/autoscaling/group_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/service/autoscaling/group_test.go b/internal/service/autoscaling/group_test.go index 8aa6a03b977..e16b9429a31 100644 --- a/internal/service/autoscaling/group_test.go +++ b/internal/service/autoscaling/group_test.go @@ -1424,9 +1424,9 @@ func TestAccAutoScalingGroup_InstanceRefresh_autoRollback(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.checkpoint_percentages.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.instance_warmup", ""), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.min_healthy_percentage", "0"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", ""), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", "Ignore"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.skip_matching", "false"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", ""), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", "Ignore"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.strategy", "Rolling"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.triggers.#", "0"), ), @@ -1442,9 +1442,9 @@ func TestAccAutoScalingGroup_InstanceRefresh_autoRollback(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.checkpoint_percentages.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.instance_warmup", ""), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.min_healthy_percentage", "0"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", ""), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.scale_in_protected_instances", "Ignore"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.skip_matching", "false"), - resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", ""), + resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.preferences.0.standby_instances", "Ignore"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.strategy", "Rolling"), resource.TestCheckResourceAttr(resourceName, "instance_refresh.0.triggers.#", "0"), ), From 4e0fe1f734e19e2068ef330ae07dbcb4cf9d4fe5 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 11 Sep 2023 10:55:43 -0400 Subject: [PATCH 7/7] Acceptance test output: % make testacc TESTARGS='-run=TestAccAutoScalingGroup_InstanceRefresh_' PKG=autoscaling ACCTEST_PARALLELISM=3 ==> Checking that code complies with gofmt requirements... TF_ACC=1 go test ./internal/service/autoscaling/... -v -count 1 -parallel 3 -run=TestAccAutoScalingGroup_InstanceRefresh_ -timeout 180m === RUN TestAccAutoScalingGroup_InstanceRefresh_basic === PAUSE TestAccAutoScalingGroup_InstanceRefresh_basic === RUN TestAccAutoScalingGroup_InstanceRefresh_start === PAUSE TestAccAutoScalingGroup_InstanceRefresh_start === RUN TestAccAutoScalingGroup_InstanceRefresh_triggers === PAUSE TestAccAutoScalingGroup_InstanceRefresh_triggers === RUN TestAccAutoScalingGroup_InstanceRefresh_autoRollback === PAUSE TestAccAutoScalingGroup_InstanceRefresh_autoRollback === CONT TestAccAutoScalingGroup_InstanceRefresh_basic === CONT TestAccAutoScalingGroup_InstanceRefresh_autoRollback === CONT TestAccAutoScalingGroup_InstanceRefresh_triggers --- PASS: TestAccAutoScalingGroup_InstanceRefresh_autoRollback (188.24s) === CONT TestAccAutoScalingGroup_InstanceRefresh_start --- PASS: TestAccAutoScalingGroup_InstanceRefresh_triggers (212.21s) --- PASS: TestAccAutoScalingGroup_InstanceRefresh_basic (344.02s) --- PASS: TestAccAutoScalingGroup_InstanceRefresh_start (262.59s) PASS ok github.com/hashicorp/terraform-provider-aws/internal/service/autoscaling 456.268s