Skip to content

Commit f151071

Browse files
authored
INTMDB-298: fixes a bug where you couldn't delete a team in team resource (#668)
* fix: fixes a bug where you couldn't delete team in team resource * added a warning log * fixes typo
1 parent 18f0639 commit f151071

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-2
lines changed

mongodbatlas/resource_mongodbatlas_project.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,11 @@ func resourceMongoDBAtlasProjectUpdate(ctx context.Context, d *schema.ResourceDa
226226

227227
_, err := conn.Teams.RemoveTeamFromProject(ctx, projectID, teamID)
228228
if err != nil {
229-
return diag.Errorf("error removing team(%s) from the project(%s): %s", teamID, projectID, err)
229+
var target *matlas.ErrorResponse
230+
if errors.As(err, &target) && target.ErrorCode != "USER_UNAUTHORIZED" {
231+
return diag.Errorf("error removing team(%s) from the project(%s): %s", teamID, projectID, err)
232+
}
233+
log.Printf("[WARN] error removing team(%s) from the project(%s): %s", teamID, projectID, err)
230234
}
231235
}
232236

mongodbatlas/resource_mongodbatlas_team.go

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import (
77
"log"
88
"net/http"
99
"strings"
10+
"time"
1011

1112
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
13+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1214
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1315

1416
matlas "go.mongodb.org/atlas/mongodbatlas"
@@ -219,7 +221,25 @@ func resourceMongoDBAtlasTeamDelete(ctx context.Context, d *schema.ResourceData,
219221
orgID := ids["org_id"]
220222
id := ids["id"]
221223

222-
_, err := conn.Teams.RemoveTeamFromOrganization(ctx, orgID, id)
224+
err := resource.RetryContext(ctx, 1*time.Hour, func() *resource.RetryError {
225+
_, err := conn.Teams.RemoveTeamFromOrganization(ctx, orgID, id)
226+
if err != nil {
227+
var target *matlas.ErrorResponse
228+
if errors.As(err, &target) && target.ErrorCode == "CANNOT_DELETE_TEAM_ASSIGNED_TO_PROJECT" {
229+
projectID, err := getProjectIDByTeamID(ctx, conn, id)
230+
if err != nil {
231+
return resource.NonRetryableError(err)
232+
}
233+
234+
_, err = conn.Teams.RemoveTeamFromProject(ctx, projectID, id)
235+
if err != nil {
236+
return resource.NonRetryableError(fmt.Errorf(errorTeamDelete, id, err))
237+
}
238+
return resource.RetryableError(fmt.Errorf("will retry again"))
239+
}
240+
}
241+
return nil
242+
})
223243
if err != nil {
224244
return diag.FromErr(fmt.Errorf(errorTeamDelete, id, err))
225245
}
@@ -267,3 +287,26 @@ func expandStringListFromSetSchema(list *schema.Set) []string {
267287

268288
return res
269289
}
290+
291+
func getProjectIDByTeamID(ctx context.Context, conn *matlas.Client, teamID string) (string, error) {
292+
options := &matlas.ListOptions{}
293+
projects, _, err := conn.Projects.GetAllProjects(ctx, options)
294+
if err != nil {
295+
return "", fmt.Errorf("error getting projects information: %s", err)
296+
}
297+
298+
for _, project := range projects.Results {
299+
teams, _, err := conn.Projects.GetProjectTeamsAssigned(ctx, project.ID)
300+
if err != nil {
301+
return "", fmt.Errorf("error getting teams from project information: %s", err)
302+
}
303+
304+
for _, team := range teams.Results {
305+
if team.TeamID == teamID {
306+
return project.ID, nil
307+
}
308+
}
309+
}
310+
311+
return "", nil
312+
}

0 commit comments

Comments
 (0)