Skip to content

Commit 6035408

Browse files
committed
feat: improve deletion of databases and users
1 parent af5c7fe commit 6035408

File tree

5 files changed

+59
-7
lines changed

5 files changed

+59
-7
lines changed

adapters/adapter_interface.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ type DatabaseAdapter interface {
55
CreateDatabase(database string) error
66
DeleteDatabase(database string) error
77
HasDatabaseUserWithAccess(username string, database string) (bool, error)
8-
UpdateDatabaseUser(username string, password string, database string) error
8+
CreateDatabaseUser(username string, password string, database string) error
9+
DeleteDatabaseUser(username string, database string) error
910
Close() error
1011
}

adapters/couchdb_adapter.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,12 @@ func (adapter couchdbAdapter) HasDatabaseUserWithAccess(username string, databas
2828
return false, nil
2929
}
3030

31-
func (adapter couchdbAdapter) UpdateDatabaseUser(database string, username string, password string) error {
31+
func (adapter couchdbAdapter) CreateDatabaseUser(database string, username string, password string) error {
32+
// TODO implement
33+
return nil
34+
}
35+
36+
func (adapter couchdbAdapter) DeleteDatabaseUser(database string, username string) error {
3237
// TODO implement
3338
return nil
3439
}

adapters/mongo_adapter.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func (adapter mongoAdapter) HasDatabaseUserWithAccess(username string, database
5555
return len(users) == 1, nil
5656
}
5757

58-
func (adapter mongoAdapter) UpdateDatabaseUser(username string, password string, database string) error {
58+
func (adapter mongoAdapter) CreateDatabaseUser(username string, password string, database string) error {
5959
r := adapter.client.Database(database).RunCommand(
6060
adapter.context,
6161
bson.D{
@@ -70,6 +70,11 @@ func (adapter mongoAdapter) UpdateDatabaseUser(username string, password string,
7070
return nil
7171
}
7272

73+
func (adapter mongoAdapter) DeleteDatabaseUser(database string, username string) error {
74+
// TODO implement
75+
return nil
76+
}
77+
7378
func (adapter mongoAdapter) Close() error {
7479
return adapter.client.Disconnect(adapter.context)
7580
}

adapters/mysql_adapter.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@ func (adapter mysqlAdapter) HasDatabaseUserWithAccess(username string, database
3030
return false, nil
3131
}
3232

33-
func (adapter mysqlAdapter) UpdateDatabaseUser(username string, password string, database string) error {
33+
func (adapter mysqlAdapter) CreateDatabaseUser(username string, password string, database string) error {
34+
// TODO implement
35+
return nil
36+
}
37+
38+
func (adapter mysqlAdapter) DeleteDatabaseUser(database string, username string) error {
3439
// TODO implement
3540
return nil
3641
}

controllers/database_controller.go

+39-3
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func (r *DatabaseReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
4444
// Request object not found, could have been deleted after reconcile request.
4545
// Owned objects are automatically garbage collected. For additional cleanup logic use finalizers.
4646
// Return and don't requeue
47-
log.Info("Database resource not found. Ignoring since object must be deleted")
47+
// log.Info("Database resource not found. Ignoring since object must be deleted")
4848
return ctrl.Result{}, nil
4949
}
5050
// Error reading the object - requeue the request.
@@ -60,6 +60,10 @@ func (r *DatabaseReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
6060
log.Info("Connected to database server")
6161

6262
hasDatabase, err := db.HasDatabase(database.Spec.Database)
63+
if err != nil {
64+
return ctrl.Result{}, err
65+
}
66+
6367
if !hasDatabase {
6468
log.Info("Create new database: '" + database.Spec.Database + "'")
6569

@@ -70,10 +74,14 @@ func (r *DatabaseReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
7074
}
7175

7276
hasDatabaseUserWithAccess, err := db.HasDatabaseUserWithAccess(database.Spec.Username, database.Spec.Database)
77+
if err != nil {
78+
return ctrl.Result{}, err
79+
}
80+
7381
if !hasDatabaseUserWithAccess {
7482
log.Info("Create new user '" + database.Spec.Username + "' with access to the database '" + database.Spec.Database + "'")
7583

76-
err = db.UpdateDatabaseUser(database.Spec.Username, database.Spec.Password, database.Spec.Database)
84+
err = db.CreateDatabaseUser(database.Spec.Username, database.Spec.Password, database.Spec.Database)
7785
if err != nil {
7886
return ctrl.Result{}, err
7987
}
@@ -163,6 +171,34 @@ func (r *DatabaseReconciler) finalizeDatabase(log logr.Logger, database *anbrate
163171
return err
164172
}
165173

174+
hasDatabaseUserWithAccess, err := db.HasDatabaseUserWithAccess(database.Spec.Username, database.Spec.Database)
175+
if err != nil {
176+
return err
177+
}
178+
179+
if hasDatabaseUserWithAccess {
180+
log.Info("Remove user '" + database.Spec.Username + "' and its access to the database '" + database.Spec.Database + "'")
181+
182+
err = db.DeleteDatabaseUser(database.Spec.Username, database.Spec.Database)
183+
if err != nil {
184+
return err
185+
}
186+
}
187+
188+
hasDatabase, err := db.HasDatabase(database.Spec.Database)
189+
if err != nil {
190+
return err
191+
}
192+
193+
if hasDatabase {
194+
log.Info("Remove database: '" + database.Spec.Database + "'")
195+
196+
err = db.DeleteDatabase(database.Spec.Database)
197+
if err != nil {
198+
return err
199+
}
200+
}
201+
166202
err = db.DeleteDatabase(database.Spec.Database)
167203
if err != nil {
168204
return err
@@ -173,7 +209,7 @@ func (r *DatabaseReconciler) finalizeDatabase(log logr.Logger, database *anbrate
173209
return err
174210
}
175211

176-
log.Info("Successfully removed database: '" + database.Spec.Database + "'")
212+
log.Info("Database: '" + database.Spec.Database + "' and user: '" + database.Spec.Username + "' removed")
177213
return nil
178214
}
179215

0 commit comments

Comments
 (0)