Skip to content

Commit 2d138fb

Browse files
authored
Implicitly force import manually added account-level user (#1063)
1 parent 6ea4df9 commit 2d138fb

File tree

4 files changed

+75
-8
lines changed

4 files changed

+75
-8
lines changed

aws/resource_user_role.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@ func ResourceUserRole() *schema.Resource {
2727
"remove", fmt.Sprintf(`roles[value eq "%s"]`, roleARN), ""))
2828
},
2929
})
30-
}
30+
}

aws/resource_user_role_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ import (
88
)
99

1010
func TestUserRoleCornerCases(t *testing.T) {
11-
qa.ResourceCornerCases(t, ResourceUserRole(),
12-
qa.CornerCaseID("a|b"),
11+
qa.ResourceCornerCases(t, ResourceUserRole(),
12+
qa.CornerCaseID("a|b"),
1313
qa.CornerCaseSkipCRUD("create"))
1414
}
1515

1616
func TestUserRoleCreate_AndGetResourceDrift(t *testing.T) {
1717
qa.ResourceFixture{
1818
Fixtures: []qa.HTTPFixture{
1919
{
20-
Method: "PATCH",
21-
Resource: "/api/2.0/preview/scim/v2/Users/a",
20+
Method: "PATCH",
21+
Resource: "/api/2.0/preview/scim/v2/Users/a",
2222
ExpectedRequest: scim.PatchRequest("add", "roles", "b"),
2323
},
2424
{
@@ -27,11 +27,11 @@ func TestUserRoleCreate_AndGetResourceDrift(t *testing.T) {
2727
Response: scim.User{},
2828
},
2929
},
30-
Create: true,
30+
Create: true,
3131
Resource: ResourceUserRole(),
3232
HCL: `
3333
user_id = "a"
3434
role = "b"
3535
`,
3636
}.ExpectError(t, "User has no role")
37-
}
37+
}

scim/resource_user.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,17 @@ func createForceOverridesManuallyAddedUser(err error, d *schema.ResourceData, us
8686
// corner-case for overriding manually provisioned users
8787
userName := strings.ReplaceAll(u.UserName, "'", "")
8888
force := fmt.Sprintf("User with username %s already exists.", userName)
89-
if err.Error() != force {
89+
force_account := "User already exists in another account"
90+
if (err.Error() != force) && (err.Error() != force_account) {
9091
return err
9192
}
9293
userList, err := usersAPI.Filter(fmt.Sprintf("userName eq '%s'", userName))
9394
if err != nil {
9495
return err
9596
}
97+
if len(userList) == 0 {
98+
return fmt.Errorf("cannot find %s for force import", userName)
99+
}
96100
user := userList[0]
97101
d.SetId(user.ID)
98102
return usersAPI.Update(d.Id(), u)

scim/resource_user_test.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,27 @@ func TestCreateForceOverwriteCannotListUsers(t *testing.T) {
404404
})
405405
}
406406

407+
func TestCreateForceOverwriteCannotListAccUsers(t *testing.T) {
408+
qa.HTTPFixturesApply(t, []qa.HTTPFixture{
409+
{
410+
Method: "GET",
411+
Resource: "/api/2.0/preview/scim/v2/Users?filter=userName%20eq%20%27me%40example.com%27",
412+
Response: UserList{
413+
TotalResults: 0,
414+
},
415+
},
416+
}, func(ctx context.Context, client *common.DatabricksClient) {
417+
d := ResourceUser().TestResourceData()
418+
d.Set("force", true)
419+
err := createForceOverridesManuallyAddedUser(
420+
fmt.Errorf("User already exists in another account"),
421+
d, NewUsersAPI(ctx, client), User{
422+
UserName: "[email protected]",
423+
})
424+
assert.EqualError(t, err, "cannot find [email protected] for force import")
425+
})
426+
}
427+
407428
func TestCreateForceOverwriteFindsAndSetsID(t *testing.T) {
408429
qa.HTTPFixturesApply(t, []qa.HTTPFixture{
409430
{
@@ -445,3 +466,45 @@ func TestCreateForceOverwriteFindsAndSetsID(t *testing.T) {
445466
assert.Equal(t, "abc", d.Id())
446467
})
447468
}
469+
470+
func TestCreateForceOverwriteFindsAndSetsAccID(t *testing.T) {
471+
qa.HTTPFixturesApply(t, []qa.HTTPFixture{
472+
{
473+
Method: "GET",
474+
Resource: "/api/2.0/preview/scim/v2/Users?filter=userName%20eq%20%27me%40example.com%27",
475+
Response: UserList{
476+
Resources: []User{
477+
{
478+
ID: "abc",
479+
},
480+
},
481+
},
482+
},
483+
{
484+
Method: "GET",
485+
Resource: "/api/2.0/preview/scim/v2/Users/abc",
486+
Response: User{
487+
ID: "abc",
488+
},
489+
},
490+
{
491+
Method: "PUT",
492+
Resource: "/api/2.0/preview/scim/v2/Users/abc",
493+
ExpectedRequest: User{
494+
Schemas: []URN{UserSchema},
495+
UserName: "[email protected]",
496+
},
497+
},
498+
}, func(ctx context.Context, client *common.DatabricksClient) {
499+
d := ResourceUser().TestResourceData()
500+
d.Set("force", true)
501+
d.Set("user_name", "[email protected]")
502+
err := createForceOverridesManuallyAddedUser(
503+
fmt.Errorf("User already exists in another account"),
504+
d, NewUsersAPI(ctx, client), User{
505+
UserName: "[email protected]",
506+
})
507+
assert.NoError(t, err)
508+
assert.Equal(t, "abc", d.Id())
509+
})
510+
}

0 commit comments

Comments
 (0)