Skip to content

Commit 8fb9c93

Browse files
authored
fix(account_project): retry delete when project is not usable (#2742)
* fix(account_project): retry delete when project is not usable * lint
1 parent 943b969 commit 8fb9c93

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

internal/services/account/helpers.go

+16
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package account
22

33
import (
4+
"errors"
5+
46
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
57
accountSDK "github.com/scaleway/scaleway-sdk-go/api/account/v3"
8+
"github.com/scaleway/scaleway-sdk-go/scw"
69
"github.com/scaleway/terraform-provider-scaleway/v2/internal/meta"
710
"github.com/scaleway/terraform-provider-scaleway/v2/internal/types"
811
)
@@ -25,3 +28,16 @@ func GetOrganizationID(m interface{}, d *schema.ResourceData) *string {
2528

2629
return nil
2730
}
31+
32+
func isProjectNotUsableError(err error) bool {
33+
if err == nil {
34+
return false
35+
}
36+
37+
responseError := &scw.PreconditionFailedError{}
38+
if errors.As(err, &responseError) && responseError.Precondition == "resource_not_usable" {
39+
return true
40+
}
41+
42+
return false
43+
}

internal/services/account/project.go

+15-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55

66
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
78
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
89
accountSDK "github.com/scaleway/scaleway-sdk-go/api/account/v3"
910
"github.com/scaleway/scaleway-sdk-go/scw"
@@ -131,10 +132,20 @@ func resourceAccountProjectUpdate(ctx context.Context, d *schema.ResourceData, m
131132
func resourceAccountProjectDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
132133
accountAPI := NewProjectAPI(m)
133134

134-
err := accountAPI.DeleteProject(&accountSDK.ProjectAPIDeleteProjectRequest{
135-
ProjectID: d.Id(),
136-
}, scw.WithContext(ctx))
137-
if err != nil && !httperrors.Is404(err) {
135+
err := retry.RetryContext(ctx, d.Timeout(schema.TimeoutDelete), func() *retry.RetryError {
136+
err := accountAPI.DeleteProject(&accountSDK.ProjectAPIDeleteProjectRequest{
137+
ProjectID: d.Id(),
138+
}, scw.WithContext(ctx))
139+
if err != nil && !httperrors.Is404(err) {
140+
if isProjectNotUsableError(err) {
141+
return retry.RetryableError(err)
142+
}
143+
144+
return retry.NonRetryableError(err)
145+
}
146+
return nil
147+
})
148+
if err != nil {
138149
return diag.FromErr(err)
139150
}
140151

0 commit comments

Comments
 (0)