Skip to content

Commit e97b73c

Browse files
fix: Do not error out when removing deleted users from teams (#620)
* fix: Do not error out when removing deleted users from teams Closes #475 * lint!
1 parent b35c642 commit e97b73c

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed

grafana/resource_team.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,12 @@ func addMemberIdsToChanges(meta interface{}, changes []MemberChange) ([]MemberCh
242242
for _, change := range changes {
243243
id, ok := gUserMap[change.Member.Email]
244244
if !ok {
245-
return nil, fmt.Errorf("error adding user %s. User does not exist in Grafana", change.Member.Email)
245+
if change.Type == AddMember {
246+
return nil, fmt.Errorf("error adding user %s. User does not exist in Grafana", change.Member.Email)
247+
} else {
248+
log.Printf("[DEBUG] Skipping removal of user %s. User does not exist in Grafana", change.Member.Email)
249+
continue
250+
}
246251
}
247252

248253
change.Member.ID = id

grafana/resource_team_test.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,57 @@ func TestAccTeam_Members(t *testing.T) {
122122
})
123123
}
124124

125+
// Test that deleted users can still be removed as members of a team
126+
func TestAccTeam_RemoveUnexistingMember(t *testing.T) {
127+
CheckOSSTestsEnabled(t)
128+
client := testAccProvider.Meta().(*client).gapi
129+
130+
var team gapi.Team
131+
var userID int64 = -1
132+
133+
resource.Test(t, resource.TestCase{
134+
ProviderFactories: testAccProviderFactories,
135+
CheckDestroy: testAccTeamCheckDestroy(&team),
136+
Steps: []resource.TestStep{
137+
{
138+
PreConfig: func() {
139+
// Create user
140+
user := gapi.User{
141+
142+
143+
Name: "user1",
144+
Password: "123456",
145+
}
146+
var err error
147+
userID, err = client.CreateUser(user)
148+
if err != nil {
149+
t.Fatal(err)
150+
}
151+
},
152+
Config: testAccTeam_withMember("[email protected]"),
153+
Check: resource.ComposeTestCheckFunc(
154+
testAccTeamCheckExists("grafana_team.test", &team),
155+
resource.TestCheckResourceAttr("grafana_team.test", "members.#", "1"),
156+
resource.TestCheckResourceAttr("grafana_team.test", "members.0", "[email protected]"),
157+
),
158+
},
159+
{
160+
PreConfig: func() {
161+
// Delete the user
162+
if err := client.DeleteUser(userID); err != nil {
163+
t.Fatal(err)
164+
}
165+
},
166+
Config: testAccTeamConfig_basic,
167+
Check: resource.ComposeTestCheckFunc(
168+
testAccTeamCheckExists("grafana_team.test", &team),
169+
resource.TestCheckResourceAttr("grafana_team.test", "members.#", "0"),
170+
),
171+
},
172+
},
173+
})
174+
}
175+
125176
//nolint:unparam // `rn` always receives `"grafana_team.test"`
126177
func testAccTeamCheckExists(rn string, a *gapi.Team) resource.TestCheckFunc {
127178
return func(s *terraform.State) error {
@@ -220,3 +271,12 @@ resource "grafana_team" "test" {
220271
members = [ ]
221272
}
222273
`
274+
275+
func testAccTeam_withMember(user string) string {
276+
return fmt.Sprintf(`
277+
resource "grafana_team" "test" {
278+
name = "terraform-acc-test"
279+
280+
members = ["%s"]
281+
}`, user)
282+
}

0 commit comments

Comments
 (0)