@@ -30,6 +30,7 @@ import (
3030 util "github.com/openstack-k8s-operators/lib-common/modules/common/util"
3131 databasev1beta1 "github.com/openstack-k8s-operators/mariadb-operator/api/v1beta1"
3232 mariadb "github.com/openstack-k8s-operators/mariadb-operator/pkg/mariadb"
33+ batchv1 "k8s.io/api/batch/v1"
3334 k8s_errors "k8s.io/apimachinery/pkg/api/errors"
3435 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3536 "k8s.io/apimachinery/pkg/runtime"
@@ -112,13 +113,23 @@ func (r *MariaDBAccountReconciler) Reconcile(ctx context.Context, req ctrl.Reque
112113 }
113114 }()
114115
115- // initialize conditions used later as Status=Unknown
116- cl := condition .CreateList (
117- condition .UnknownCondition (condition .ReadyCondition , condition .InitReason , condition .ReadyInitMessage ),
118- condition .UnknownCondition (databasev1beta1 .MariaDBServerReadyCondition , condition .InitReason , databasev1beta1 .MariaDBServerReadyInitMessage ),
119- condition .UnknownCondition (databasev1beta1 .MariaDBDatabaseReadyCondition , condition .InitReason , databasev1beta1 .MariaDBDatabaseReadyInitMessage ),
120- condition .UnknownCondition (databasev1beta1 .MariaDBAccountReadyCondition , condition .InitReason , databasev1beta1 .MariaDBAccountReadyInitMessage ),
121- )
116+ var cl condition.Conditions
117+ if instance .IsUserAccount () {
118+ // initialize conditions used later as Status=Unknown
119+ cl = condition .CreateList (
120+ condition .UnknownCondition (condition .ReadyCondition , condition .InitReason , condition .ReadyInitMessage ),
121+ condition .UnknownCondition (databasev1beta1 .MariaDBServerReadyCondition , condition .InitReason , databasev1beta1 .MariaDBServerReadyInitMessage ),
122+ condition .UnknownCondition (databasev1beta1 .MariaDBDatabaseReadyCondition , condition .InitReason , databasev1beta1 .MariaDBDatabaseReadyInitMessage ),
123+ condition .UnknownCondition (databasev1beta1 .MariaDBAccountReadyCondition , condition .InitReason , databasev1beta1 .MariaDBAccountReadyInitMessage ),
124+ )
125+ } else {
126+ // initialize conditions used later as Status=Unknown
127+ cl = condition .CreateList (
128+ condition .UnknownCondition (condition .ReadyCondition , condition .InitReason , condition .ReadyInitMessage ),
129+ condition .UnknownCondition (databasev1beta1 .MariaDBServerReadyCondition , condition .InitReason , databasev1beta1 .MariaDBServerReadyInitMessage ),
130+ condition .UnknownCondition (databasev1beta1 .MariaDBAccountReadyCondition , condition .InitReason , databasev1beta1 .MariaDBAccountReadyInitMessage ),
131+ )
132+ }
122133 instance .Status .Conditions .Init (& cl )
123134
124135 if instance .DeletionTimestamp .IsZero () || isNewInstance { //revive:disable:indent-error-flow
@@ -134,23 +145,30 @@ func (r *MariaDBAccountReconciler) reconcileCreate(
134145 ctx context.Context , log logr.Logger ,
135146 helper * helper.Helper , instance * databasev1beta1.MariaDBAccount ) (result ctrl.Result , _err error ) {
136147
137- // get a handle to the current, active MariaDBDatabase.
138- // if not ready yet, requeue.
139- mariadbDatabase , result , err := r .getMariaDBDatabaseForCreate (ctx , log , instance )
140- if mariadbDatabase == nil {
141- return result , err
148+ var mariadbDatabase * databasev1beta1.MariaDBDatabase
149+ var err error
150+
151+ if instance .IsUserAccount () {
152+ // for User account, get a handle to the current, active MariaDBDatabase.
153+ // if not ready yet, requeue.
154+ mariadbDatabase , result , err = r .getMariaDBDatabaseForCreate (ctx , log , instance )
155+ if mariadbDatabase == nil {
156+ return result , err
157+ }
142158 }
143159
144160 if controllerutil .AddFinalizer (instance , helper .GetFinalizer ()) {
145161 // we need to persist this right away
146162 return ctrl.Result {}, nil
147163 }
148164
149- // MariaDBdatabase exists and we are a create case. ensure finalizers set up
150- if controllerutil .AddFinalizer (mariadbDatabase , fmt .Sprintf ("%s-%s" , helper .GetFinalizer (), instance .Name )) {
151- err = r .Update (ctx , mariadbDatabase )
152- if err != nil {
153- return ctrl.Result {}, err
165+ if instance .IsUserAccount () {
166+ // MariaDBdatabase exists and we are a create case. ensure finalizers set up
167+ if controllerutil .AddFinalizer (mariadbDatabase , fmt .Sprintf ("%s-%s" , helper .GetFinalizer (), instance .Name )) {
168+ err = r .Update (ctx , mariadbDatabase )
169+ if err != nil {
170+ return ctrl.Result {}, err
171+ }
154172 }
155173 }
156174
@@ -174,13 +192,25 @@ func (r *MariaDBAccountReconciler) reconcileCreate(
174192 return result , err
175193 }
176194
177- log .Info (fmt .Sprintf ("Running account create '%s' MariaDBDatabase '%s'" ,
178- instance .Name , mariadbDatabase .Spec .Name ))
179- jobDef , err := mariadb .CreateDbAccountJob (
180- dbGalera , instance , mariadbDatabase .Spec .Name , dbHostname ,
181- dbContainerImage , serviceAccountName , dbGalera .Spec .NodeSelector )
182- if err != nil {
183- return ctrl.Result {}, err
195+ var jobDef * batchv1.Job
196+
197+ if instance .IsUserAccount () {
198+ log .Info (fmt .Sprintf ("Running account create '%s' MariaDBDatabase '%s'" ,
199+ instance .Name , mariadbDatabase .Spec .Name ))
200+ jobDef , err = mariadb .CreateDbAccountJob (
201+ dbGalera , instance , mariadbDatabase .Spec .Name , dbHostname ,
202+ dbContainerImage , serviceAccountName , dbGalera .Spec .NodeSelector )
203+ if err != nil {
204+ return ctrl.Result {}, err
205+ }
206+ } else {
207+ log .Info (fmt .Sprintf ("Running system account create '%s'" , instance .Name ))
208+ jobDef , err = mariadb .CreateDbAccountJob (
209+ dbGalera , instance , "" , dbHostname ,
210+ dbContainerImage , serviceAccountName , dbGalera .Spec .NodeSelector )
211+ if err != nil {
212+ return ctrl.Result {}, err
213+ }
184214 }
185215
186216 accountCreateHash := instance .Status .Hash [databasev1beta1 .AccountCreateHash ]
@@ -228,9 +258,14 @@ func (r *MariaDBAccountReconciler) reconcileDelete(
228258 ctx context.Context , log logr.Logger ,
229259 helper * helper.Helper , instance * databasev1beta1.MariaDBAccount ) (result ctrl.Result , _err error ) {
230260
231- mariadbDatabase , result , err := r .getMariaDBDatabaseForDelete (ctx , log , helper , instance )
232- if mariadbDatabase == nil {
233- return result , err
261+ var mariadbDatabase * databasev1beta1.MariaDBDatabase
262+ var err error
263+
264+ if instance .IsUserAccount () {
265+ mariadbDatabase , result , err = r .getMariaDBDatabaseForDelete (ctx , log , helper , instance )
266+ if mariadbDatabase == nil {
267+ return result , err
268+ }
234269 }
235270
236271 // dont do actual DROP USER until finalizers from downstream controllers
@@ -259,10 +294,12 @@ func (r *MariaDBAccountReconciler) reconcileDelete(
259294 databasev1beta1 .MariaDBAccountReadyForDeleteMessage ,
260295 )
261296
262- instance .Status .Conditions .MarkTrue (
263- databasev1beta1 .MariaDBDatabaseReadyCondition ,
264- databasev1beta1 .MariaDBDatabaseReadyMessage ,
265- )
297+ if instance .IsUserAccount () {
298+ instance .Status .Conditions .MarkTrue (
299+ databasev1beta1 .MariaDBDatabaseReadyCondition ,
300+ databasev1beta1 .MariaDBDatabaseReadyMessage ,
301+ )
302+ }
266303
267304 // now proceed to do actual work. acquire the Galera instance
268305 // which will lead us to the hostname and container image to target
@@ -273,18 +310,19 @@ func (r *MariaDBAccountReconciler) reconcileDelete(
273310 // implemented in the database either, so remove all finalizers and
274311 // exit
275312 if k8s_errors .IsNotFound (err ) {
276- // remove finalizer from the MariaDBDatabase instance
277- if controllerutil .RemoveFinalizer (mariadbDatabase , fmt .Sprintf ("%s-%s" , helper .GetFinalizer (), instance .Name )) {
278- err = r .Update (ctx , mariadbDatabase )
279-
280- if err != nil && ! k8s_errors .IsNotFound (err ) {
281- return ctrl.Result {}, err
313+ if instance .IsUserAccount () {
314+ // remove finalizer from the MariaDBDatabase instance
315+ if controllerutil .RemoveFinalizer (mariadbDatabase , fmt .Sprintf ("%s-%s" , helper .GetFinalizer (), instance .Name )) {
316+ err = r .Update (ctx , mariadbDatabase )
317+
318+ if err != nil && ! k8s_errors .IsNotFound (err ) {
319+ return ctrl.Result {}, err
320+ }
282321 }
283-
284322 }
285323
286324 // remove local finalizer
287- err = r .removeAccountAndSecretFinalizer (ctx , helper , instance )
325+ err : = r .removeAccountAndSecretFinalizer (ctx , helper , instance )
288326 return ctrl.Result {}, err
289327 } else if dbGalera == nil {
290328 return result , err
@@ -293,13 +331,24 @@ func (r *MariaDBAccountReconciler) reconcileDelete(
293331 dbContainerImage := dbGalera .Spec .ContainerImage
294332 serviceAccountName := dbGalera .RbacResourceName ()
295333
296- log . Info ( fmt . Sprintf ( "Running account delete '%s' MariaDBDatabase '%s'" , instance . Name , mariadbDatabase . Spec . Name ))
334+ var jobDef * batchv1. Job
297335
298- jobDef , err := mariadb .DeleteDbAccountJob (dbGalera , instance , mariadbDatabase .Spec .Name , dbHostname , dbContainerImage , serviceAccountName , dbGalera .Spec .NodeSelector )
299- if err != nil {
300- return ctrl.Result {}, err
301- }
336+ if instance .IsUserAccount () {
302337
338+ log .Info (fmt .Sprintf ("Running account delete '%s' MariaDBDatabase '%s'" , instance .Name , mariadbDatabase .Spec .Name ))
339+
340+ jobDef , err = mariadb .DeleteDbAccountJob (dbGalera , instance , mariadbDatabase .Spec .Name , dbHostname , dbContainerImage , serviceAccountName , dbGalera .Spec .NodeSelector )
341+ if err != nil {
342+ return ctrl.Result {}, err
343+ }
344+ } else {
345+ log .Info (fmt .Sprintf ("Running system account delete '%s'" , instance .Name ))
346+
347+ jobDef , err = mariadb .DeleteDbAccountJob (dbGalera , instance , "" , dbHostname , dbContainerImage , serviceAccountName , dbGalera .Spec .NodeSelector )
348+ if err != nil {
349+ return ctrl.Result {}, err
350+ }
351+ }
303352 accountDeleteHash := instance .Status .Hash [databasev1beta1 .AccountDeleteHash ]
304353 accountDeleteJob := job .NewJob (
305354 jobDef ,
@@ -324,16 +373,17 @@ func (r *MariaDBAccountReconciler) reconcileDelete(
324373 }
325374
326375 // first, remove finalizer from the MariaDBDatabase instance
327- if controllerutil .RemoveFinalizer (mariadbDatabase , fmt .Sprintf ("%s-%s" , helper .GetFinalizer (), instance .Name )) {
328- err = r .Update (ctx , mariadbDatabase )
329- if err != nil {
330- return ctrl.Result {}, err
376+ if instance .IsUserAccount () {
377+ if controllerutil .RemoveFinalizer (mariadbDatabase , fmt .Sprintf ("%s-%s" , helper .GetFinalizer (), instance .Name )) {
378+ err = r .Update (ctx , mariadbDatabase )
379+ if err != nil {
380+ return ctrl.Result {}, err
381+ }
331382 }
332383 }
333384
334385 // then remove finalizer from our own instance
335386 err = r .removeAccountAndSecretFinalizer (ctx , helper , instance )
336-
337387 return ctrl.Result {}, err
338388}
339389
@@ -492,9 +542,17 @@ func (r *MariaDBAccountReconciler) getGaleraForCreateOrDelete(
492542 helper * helper.Helper , instance * databasev1beta1.MariaDBAccount ,
493543 mariadbDatabase * databasev1beta1.MariaDBDatabase ) (* databasev1beta1.Galera , string , ctrl.Result , error ) {
494544
495- dbName := mariadbDatabase .Labels ["dbName" ]
545+ var dbGalera * databasev1beta1.Galera
546+ var err error
547+ var dbName string
496548
497- dbGalera , err := GetDatabaseObject (ctx , r .Client , dbName , instance .Namespace )
549+ if instance .IsUserAccount () {
550+ dbName = mariadbDatabase .Labels ["dbName" ]
551+ } else {
552+ // note mariadbDatabase is passed as nil in this case
553+ dbName = instance .Labels ["dbName" ]
554+ }
555+ dbGalera , err = GetDatabaseObject (ctx , r .Client , dbName , instance .Namespace )
498556
499557 if err != nil {
500558 log .Error (err , "Error retrieving Galera instance" )
0 commit comments