Skip to content

Commit a2698ab

Browse files
CLOUDP-58790: Take database name from a flag when handling dbusers, Atlas (#53)
1 parent 9df5aa7 commit a2698ab

11 files changed

+65
-39
lines changed

e2e/atlas_dbusers_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ func TestAtlasDBUsers(t *testing.T) {
125125
})
126126

127127
t.Run("Delete", func(t *testing.T) {
128-
cmd := exec.Command(cliPath, atlasEntity, dbusersEntity, "delete", username, "--force")
128+
cmd := exec.Command(cliPath, atlasEntity, dbusersEntity, "delete", username, "--force", "--authDB", "admin")
129129
cmd.Env = os.Environ()
130130
resp, err := cmd.CombinedOutput()
131131

internal/cli/atlas_alert_config_delete_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ func TestAtlasAlertConfigsDelete_Run(t *testing.T) {
3030
deleteOpts := &atlasAlertConfigDeleteOpts{
3131
globalOpts: newGlobalOpts(),
3232
deleteOpts: &deleteOpts{
33-
confirm: true,
34-
entry: "test",
33+
confirm: true,
34+
entry: "test",
35+
successMessage: "Alert config '%s' deleted\n",
3536
},
3637
store: mockStore,
3738
}

internal/cli/atlas_clusters_delete_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ func TestAtlasClustersDelete_Run(t *testing.T) {
3030
deleteOpts := &atlasClustersDeleteOpts{
3131
globalOpts: newGlobalOpts(),
3232
deleteOpts: &deleteOpts{
33-
confirm: true,
34-
entry: "test",
33+
confirm: true,
34+
entry: "test",
35+
successMessage: "Cluster '%s' deleted\n",
3536
},
3637
store: mockStore,
3738
}

internal/cli/atlas_dbusers_delete.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ import (
2424
type atlasDBUsersDeleteOpts struct {
2525
*globalOpts
2626
*deleteOpts
27-
store store.DatabaseUserDeleter
27+
authDB string
28+
store store.DatabaseUserDeleter
2829
}
2930

3031
func (opts *atlasDBUsersDeleteOpts) init() error {
@@ -38,7 +39,7 @@ func (opts *atlasDBUsersDeleteOpts) init() error {
3839
}
3940

4041
func (opts *atlasDBUsersDeleteOpts) Run() error {
41-
return opts.DeleteFromProject(opts.store.DeleteDatabaseUser, opts.ProjectID())
42+
return opts.DeleterFromProjectAuthDB(opts.store.DeleteDatabaseUser, opts.authDB, opts.ProjectID())
4243
}
4344

4445
// mongocli atlas dbuser(s) delete <username> --force
@@ -70,6 +71,7 @@ func AtlasDBUsersDeleteBuilder() *cobra.Command {
7071
cmd.Flags().BoolVar(&opts.confirm, flags.Force, false, usage.Force)
7172

7273
cmd.Flags().StringVar(&opts.projectID, flags.ProjectID, "", usage.ProjectID)
74+
cmd.Flags().StringVar(&opts.authDB, flags.AuthDB, "admin", usage.AuthDB)
7375

7476
return cmd
7577
}

internal/cli/atlas_dbusers_delete_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,17 @@ func TestAtlasDBUsersDelete_Run(t *testing.T) {
3030
deleteOpts := &atlasDBUsersDeleteOpts{
3131
globalOpts: newGlobalOpts(),
3232
deleteOpts: &deleteOpts{
33-
confirm: true,
34-
entry: "test",
33+
confirm: true,
34+
entry: "test",
35+
successMessage: "DB user '%s' deleted\n",
3536
},
36-
store: mockStore,
37+
authDB: "admin",
38+
store: mockStore,
3739
}
3840

3941
mockStore.
4042
EXPECT().
41-
DeleteDatabaseUser(deleteOpts.projectID, deleteOpts.entry).
43+
DeleteDatabaseUser(deleteOpts.authDB, deleteOpts.projectID, deleteOpts.entry).
4244
Return(nil).
4345
Times(1)
4446

internal/cli/atlas_whitelist_delete_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ func TestAtlasWhitelistDelete_Run(t *testing.T) {
3030
deleteOpts := &atlasWhitelistDeleteOpts{
3131
globalOpts: newGlobalOpts(),
3232
deleteOpts: &deleteOpts{
33-
confirm: true,
34-
entry: "test",
33+
confirm: true,
34+
entry: "test",
35+
successMessage: "Project whitelist entry '%s' deleted\n",
3536
},
3637
store: mockStore,
3738
}

internal/cli/cli.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ type deleteOpts struct {
6565
// DeleterFromProject a function to delete from the store.
6666
type DeleterFromProject func(projectID string, entry string) error
6767

68+
// DeleterFromProjectAuthDB a function to delete from the store.
69+
type DeleterFromProjectAuthDB func(authDB string, projectID string, entry string) error
70+
6871
// DeleteFromProject deletes a resource from a project, it expects a callback
6972
// that should perform the deletion from the store.
7073
func (opts *deleteOpts) DeleteFromProject(d DeleterFromProject, projectID string) error {
@@ -83,6 +86,24 @@ func (opts *deleteOpts) DeleteFromProject(d DeleterFromProject, projectID string
8386
return nil
8487
}
8588

89+
// DeleterFromProjectAuthDB deletes a resource from a project, it expects a callback
90+
// that should perform the deletion from the store.
91+
func (opts *deleteOpts) DeleterFromProjectAuthDB(d DeleterFromProjectAuthDB, authDB, projectID string) error {
92+
if !opts.confirm {
93+
fmt.Println(opts.failMessage)
94+
return nil
95+
}
96+
err := d(authDB, projectID, opts.entry)
97+
98+
if err != nil {
99+
return err
100+
}
101+
102+
fmt.Printf(opts.successMessage, opts.entry)
103+
104+
return nil
105+
}
106+
86107
// Deleter a function to delete from the store.
87108
type Deleter func(entry string) error
88109

internal/flags/flags.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ const (
2020
ProfileShort = "p" // ProfileShort flag to use a profile
2121
OrgID = "orgId" // OrgID flag to use an Organization ID
2222
ProjectID = "projectId" // ProjectID flag to use a project ID
23+
AuthDB = "authDB" // AuthDB flag
2324
Provider = "provider" // Provider flag to set the cloud provider
2425
Region = "region" // Region flag
2526
RegionShort = "r" // RegionShort flag
@@ -31,7 +32,6 @@ const (
3132
Backup = "backup" // Backup flag
3233
Username = "username" // Username flag
3334
Password = "password" // Password flag
34-
AuthDB = "authDB" // AuthDB flag
3535
Email = "email" // Email flag
3636
FirstName = "firstName" // FirstName flag
3737
LastName = "lastName" // LastName flag

internal/mocks/mock_database_users.go

Lines changed: 16 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/store/database_users.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ type DatabaseUserCreator interface {
3131
}
3232

3333
type DatabaseUserDeleter interface {
34-
DeleteDatabaseUser(string, string) error
34+
DeleteDatabaseUser(string, string, string) error
3535
}
3636

3737
type DatabaseUserUpdater interface {
3838
UpdateDatabaseUser(*atlas.DatabaseUser) (*atlas.DatabaseUser, error)
3939
}
4040

4141
type DatabaseUserDescriber interface {
42-
DatabaseUser(string, string) (*atlas.DatabaseUser, error)
42+
DatabaseUser(string, string, string) (*atlas.DatabaseUser, error)
4343
}
4444

4545
type DatabaseUserStore interface {
@@ -60,11 +60,10 @@ func (s *Store) CreateDatabaseUser(user *atlas.DatabaseUser) (*atlas.DatabaseUse
6060
}
6161
}
6262

63-
func (s *Store) DeleteDatabaseUser(groupID, username string) error {
64-
dbName := "admin"
63+
func (s *Store) DeleteDatabaseUser(authDB, groupID, username string) error {
6564
switch s.service {
6665
case config.CloudService:
67-
_, err := s.client.(*atlas.Client).DatabaseUsers.Delete(context.Background(), dbName, groupID, username)
66+
_, err := s.client.(*atlas.Client).DatabaseUsers.Delete(context.Background(), authDB, groupID, username)
6867
return err
6968
default:
7069
return fmt.Errorf("unsupported service: %s", s.service)
@@ -91,11 +90,10 @@ func (s *Store) UpdateDatabaseUser(user *atlas.DatabaseUser) (*atlas.DatabaseUse
9190
}
9291
}
9392

94-
func (s *Store) DatabaseUser(groupID string, username string) (*atlas.DatabaseUser, error) {
95-
dbName := "admin"
93+
func (s *Store) DatabaseUser(authDB string, groupID string, username string) (*atlas.DatabaseUser, error) {
9694
switch s.service {
9795
case config.CloudService:
98-
result, _, err := s.client.(*atlas.Client).DatabaseUsers.Get(context.Background(), dbName, groupID, username)
96+
result, _, err := s.client.(*atlas.Client).DatabaseUsers.Get(context.Background(), authDB, groupID, username)
9997
return result, err
10098
default:
10199
return nil, fmt.Errorf("unsupported service: %s", s.service)

internal/usage/usage.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ const (
2323
DiskSizeGB = "Capacity, in gigabytes, of the host’s root volume."
2424
Backup = "If true, uses Atlas Continuous Backups to back up cluster data."
2525
MDBVersion = "MongoDB version of the cluster to deploy."
26+
AuthDB = "Authentication database name."
2627
Page = "Page number."
2728
Limit = "Number of items per page."
2829
Username = "Username for authenticating to MongoDB."
2930
Password = "User’s password."
30-
AuthDB = "Authentication database name."
3131
Roles = "User's roles and the databases or collections on which the roles apply."
3232
Comment = "Optional description of the whitelist entry."
3333
Force = "Don't ask for confirmation."

0 commit comments

Comments
 (0)