Skip to content

Commit dd353ae

Browse files
committed
implement MariaDBAccount controller
1 parent cb96d73 commit dd353ae

File tree

8 files changed

+747
-60
lines changed

8 files changed

+747
-60
lines changed

api/v1beta1/conditions.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ import (
2323
const (
2424
// MariaDBInitializedCondition Status=True condition which indicates if the MariaDB dbinit has completed
2525
MariaDBInitializedCondition condition.Type = "MariaDBInitialized"
26+
27+
MariaDBDatabaseReadyCondition condition.Type = "MariaDBDatabaseReady"
28+
29+
MariaDBAccountReadyCondition condition.Type = "MariaDBAccountReady"
30+
31+
// MariaDBServerReadyCondition Status=True condition which indicates that the MariaDB and/or
32+
// Galera server is ready for database / account create/drop operations to proceed
33+
MariaDBServerReadyCondition condition.Type = "MariaDBServerReady"
2634
)
2735

2836
// MariaDB Reasons used by API objects.
@@ -60,4 +68,22 @@ const (
6068

6169
// MariaDBInitializedErrorMessage
6270
MariaDBInitializedErrorMessage = "MariaDB dbinit error occured %s"
71+
72+
MariaDBDatabaseReadyInitMessage = "MariaDBDatabase not yet available"
73+
74+
MariaDBDatabaseReadyMessage = "MariaDBDatabase ready"
75+
76+
MariaDBServerReadyInitMessage = "MariaDB / Galera server not yet available"
77+
78+
MariaDBServerReadyMessage = "MariaDB / Galera server ready"
79+
80+
MariaDBAccountReadyInitMessage = "MariaDBAccount create / drop not started"
81+
82+
MariaDBAccountReadyMessage = "MariaDBAccount creation complete"
83+
84+
MariaDBAccountSecretNotReadyMessage = "MariaDBAccount secret is missing or incomplete: %s"
85+
86+
MariaDBErrorRetrievingMariaDBDatabaseMessage = "Error retrieving MariaDBDatabase instance %s"
87+
88+
MariaDBErrorRetrievingMariaDBGaleraMessage = "Error retrieving MariaDB/Galera instance %s"
6389
)

config/rbac/role.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,16 @@ rules:
112112
- pods/exec
113113
verbs:
114114
- create
115+
- apiGroups:
116+
- ""
117+
resources:
118+
- secrets
119+
verbs:
120+
- create
121+
- delete
122+
- get
123+
- list
124+
- update
115125
- apiGroups:
116126
- ""
117127
resources:

controllers/galera_controller.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
corev1 "k8s.io/api/core/v1"
2929
rbacv1 "k8s.io/api/rbac/v1"
3030
k8s_errors "k8s.io/apimachinery/pkg/api/errors"
31+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3132
"k8s.io/client-go/kubernetes"
3233
"k8s.io/client-go/rest"
3334
"k8s.io/kubectl/pkg/util/podutils"
@@ -49,6 +50,7 @@ import (
4950
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
5051
"sigs.k8s.io/controller-runtime/pkg/log"
5152

53+
databasev1beta1 "github.com/openstack-k8s-operators/mariadb-operator/api/v1beta1"
5254
mariadbv1 "github.com/openstack-k8s-operators/mariadb-operator/api/v1beta1"
5355
mariadb "github.com/openstack-k8s-operators/mariadb-operator/pkg/mariadb"
5456
)
@@ -671,3 +673,45 @@ func (r *GaleraReconciler) SetupWithManager(mgr ctrl.Manager) error {
671673
Owns(&rbacv1.RoleBinding{}).
672674
Complete(r)
673675
}
676+
677+
// GetDatabaseObject - returns either a Galera or MariaDB object (and an associated client.Object interface).
678+
// used by both MariaDBDatabaseReconciler and MariaDBAccountReconciler
679+
// this will later return only Galera objects, so as a lookup it's part of the galera controller
680+
681+
func GetDatabaseObject(clientObj client.Client, ctx context.Context, name string, namespace string) (client.Object, error) {
682+
683+
dbGalera := &databasev1beta1.Galera{
684+
ObjectMeta: metav1.ObjectMeta{
685+
Name: name,
686+
Namespace: namespace,
687+
},
688+
}
689+
690+
objectKey := client.ObjectKeyFromObject(dbGalera)
691+
692+
err := clientObj.Get(ctx, objectKey, dbGalera)
693+
if err != nil && !k8s_errors.IsNotFound(err) {
694+
return nil, err
695+
}
696+
697+
if err != nil {
698+
// Try to fetch MariaDB when Galera is not used
699+
dbMariadb := &databasev1beta1.MariaDB{
700+
ObjectMeta: metav1.ObjectMeta{
701+
Name: name,
702+
Namespace: namespace,
703+
},
704+
}
705+
706+
objectKey = client.ObjectKeyFromObject(dbMariadb)
707+
708+
err = clientObj.Get(ctx, objectKey, dbMariadb)
709+
if err != nil {
710+
return nil, err
711+
}
712+
713+
return dbMariadb, nil
714+
}
715+
716+
return dbGalera, nil
717+
}

0 commit comments

Comments
 (0)