Skip to content

Commit

Permalink
feat: allow to purge additional_disk_space
Browse files Browse the repository at this point in the history
  • Loading branch information
byashimov committed Oct 30, 2024
1 parent 04b1dc9 commit 221556a
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 2 deletions.
48 changes: 47 additions & 1 deletion internal/schemautil/custom_diff.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,16 @@ import (
"strings"

"github.com/aiven/aiven-go-client/v2"
avngen "github.com/aiven/go-client-codegen"
"github.com/aiven/go-client-codegen/handler/service"
"github.com/docker/go-units"
"github.com/google/go-cmp/cmp"
"github.com/hashicorp/go-cty/cty"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"golang.org/x/exp/slices"

"github.com/aiven/terraform-provider-aiven/internal/common"
)

func CustomizeDiffGenericService(serviceType string) schema.CustomizeDiffFunc {
Expand All @@ -27,7 +32,10 @@ func CustomizeDiffGenericService(serviceType string) schema.CustomizeDiffFunc {
),
customdiff.IfValueChange("additional_disk_space",
ShouldNotBeEmpty,
CustomizeDiffCheckDiskSpace,
customdiff.Sequence(
CustomizeDiffCheckDiskSpace,
CustomizeDiffAdditionalDiskSpace,
),
),
customdiff.IfValueChange("service_integrations",
ShouldNotBeEmpty,
Expand Down Expand Up @@ -254,3 +262,41 @@ func checkForMultipleValues(v cty.Value) error {

return nil
}

// CustomizeDiffAdditionalDiskSpace
// 1. checks that additional_disk_space is not set if autoscaler is enabled
// 2. outputs a diff for a computed field, which otherwise would be suppressed when removed
func CustomizeDiffAdditionalDiskSpace(ctx context.Context, diff *schema.ResourceDiff, _ interface{}) error {
client, err := common.GenClient()
if err != nil {
return err
}

s, err := client.ServiceGet(ctx, diff.Get("project").(string), diff.Get("service_name").(string))
if avngen.IsNotFound(err) {
// The service does not exist, so we cannot check if autoscaler is enabled
return nil
}

if err != nil {
return err
}

for _, i := range s.ServiceIntegrations {
if i.IntegrationType == service.IntegrationTypeAutoscaler {
// Autoscaler is enabled, so we cannot set additional_disk_space
return ErrAutoscalerConflict
}
}

k := "additional_disk_space"
oldValue, newValue := diff.GetChange(k)
if cmp.Equal(oldValue, newValue) {
// The value hasn't changed, so we don't need to do anything
return nil
}

// Outputs a diff for a computed field,
// which otherwise would be suppressed
return diff.SetNew(k, "0")
}
2 changes: 1 addition & 1 deletion internal/sdkprovider/service/pg/pg_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ func TestAccAivenPG_deleting_additional_disk_size(t *testing.T) {
resource.TestCheckResourceAttr(resourceName, "maintenance_window_dow", "monday"),
resource.TestCheckResourceAttr(resourceName, "maintenance_window_time", "10:00:00"),
resource.TestCheckResourceAttr(resourceName, "disk_space_default", "80GiB"),
resource.TestCheckResourceAttr(resourceName, "disk_space_used", "100GiB"),
resource.TestCheckResourceAttr(resourceName, "disk_space_used", "80GiB"),
resource.TestCheckResourceAttr(resourceName, "termination_protection", "false"),
),
},
Expand Down

0 comments on commit 221556a

Please sign in to comment.