diff --git a/.changelog/40773.txt b/.changelog/40773.txt new file mode 100644 index 00000000000..77a16f6b099 --- /dev/null +++ b/.changelog/40773.txt @@ -0,0 +1,3 @@ +```release-note:bug +resource/aws_codebuild_fleet: Allow `scaling_configuration` to be removed on Update +``` diff --git a/internal/service/codebuild/fleet.go b/internal/service/codebuild/fleet.go index ff908946fb8..5058897afda 100644 --- a/internal/service/codebuild/fleet.go +++ b/internal/service/codebuild/fleet.go @@ -323,12 +323,8 @@ func resourceFleetRead(ctx context.Context, d *schema.ResourceData, meta interfa d.Set(names.AttrName, fleet.Name) d.Set("overflow_behavior", fleet.OverflowBehavior) - if fleet.ScalingConfiguration != nil { - if err := d.Set("scaling_configuration", []interface{}{flattenScalingConfiguration(fleet.ScalingConfiguration)}); err != nil { - return create.AppendDiagError(diags, names.CodeBuild, create.ErrActionSetting, resNameFleet, d.Id(), err) - } - } else { - d.Set("scaling_configuration", nil) + if err := d.Set("scaling_configuration", flattenScalingConfiguration(fleet.ScalingConfiguration)); err != nil { + return create.AppendDiagError(diags, names.CodeBuild, create.ErrActionSetting, resNameFleet, d.Id(), err) } if fleet.Status != nil { @@ -392,6 +388,8 @@ func resourceFleetUpdate(ctx context.Context, d *schema.ResourceData, meta inter if d.HasChange("scaling_configuration") { if v, ok := d.GetOk("scaling_configuration"); ok && len(v.([]interface{})) > 0 && v.([]interface{})[0] != nil { input.ScalingConfiguration = expandScalingConfiguration(v.([]interface{})[0].(map[string]interface{})) + } else { + input.ScalingConfiguration = &types.ScalingConfigurationInput{} } } @@ -689,7 +687,7 @@ func flattenComputeConfiguration(apiObject *types.ComputeConfiguration) map[stri return tfMap } -func flattenScalingConfiguration(apiObject *types.ScalingConfigurationOutput) map[string]interface{} { +func flattenScalingConfiguration(apiObject *types.ScalingConfigurationOutput) []interface{} { if apiObject == nil { return nil } @@ -712,7 +710,11 @@ func flattenScalingConfiguration(apiObject *types.ScalingConfigurationOutput) ma tfMap["target_tracking_scaling_configs"] = flattenTargetTrackingScalingConfigs(v) } - return tfMap + if len(tfMap) == 0 { + return nil + } + + return []interface{}{tfMap} } func flattenTargetTrackingScalingConfigs(apiObjects []types.TargetTrackingScalingConfiguration) []interface{} { diff --git a/internal/service/codebuild/fleet_test.go b/internal/service/codebuild/fleet_test.go index bec681bbce0..13b9bc0e694 100644 --- a/internal/service/codebuild/fleet_test.go +++ b/internal/service/codebuild/fleet_test.go @@ -289,6 +289,11 @@ func TestAccCodeBuildFleet_scalingConfiguration(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "scaling_configuration.0.target_tracking_scaling_configs.0.target_value", "97.5"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, { Config: testAccFleetConfig_scalingConfiguration2(rName), Check: resource.ComposeTestCheckFunc( @@ -301,6 +306,13 @@ func TestAccCodeBuildFleet_scalingConfiguration(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "scaling_configuration.0.target_tracking_scaling_configs.0.target_value", "90.5"), ), }, + { + Config: testAccFleetConfig_scalingConfiguration3(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckFleetExists(ctx, resourceName), + resource.TestCheckResourceAttr(resourceName, "scaling_configuration.#", "0"), + ), + }, }, }) } @@ -509,6 +521,18 @@ resource "aws_codebuild_fleet" "test" { `, rName) } +func testAccFleetConfig_scalingConfiguration3(rName string) string { + return fmt.Sprintf(` +resource "aws_codebuild_fleet" "test" { + base_capacity = 1 + compute_type = "BUILD_GENERAL1_SMALL" + environment_type = "ARM_CONTAINER" + name = %[1]q + overflow_behavior = "QUEUE" +} +`, rName) +} + func testAccFleetConfig_baseFleetServiceRole(rName string) string { return fmt.Sprintf(` resource "aws_iam_role" "test" {