@@ -11,17 +11,18 @@ import (
1111 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1212 "k8s.io/apimachinery/pkg/types"
1313 "sigs.k8s.io/controller-runtime/pkg/client"
14+ logf "sigs.k8s.io/controller-runtime/pkg/log"
1415
1516 api "github.com/percona/percona-server-mongodb-operator/pkg/apis/psmdb/v1"
1617 "github.com/percona/percona-server-mongodb-operator/pkg/naming"
1718 "github.com/percona/percona-server-mongodb-operator/pkg/psmdb"
1819 "github.com/percona/percona-server-mongodb-operator/pkg/psmdb/secret"
1920)
2021
21- func getUserSecret (ctx context.Context , cl client.Reader , cr * api.PerconaServerMongoDB , name string ) (corev1.Secret , error ) {
22+ func getSecret (ctx context.Context , cl client.Reader , cr * api.PerconaServerMongoDB , name string ) (corev1.Secret , error ) {
2223 secrets := corev1.Secret {}
2324 err := cl .Get (ctx , types.NamespacedName {Name : name , Namespace : cr .Namespace }, & secrets )
24- return secrets , errors . Wrap ( err , "get user secrets" )
25+ return secrets , err
2526}
2627
2728func getInternalCredentials (ctx context.Context , cl client.Reader , cr * api.PerconaServerMongoDB , role api.SystemUserRole ) (psmdb.Credentials , error ) {
@@ -30,7 +31,7 @@ func getInternalCredentials(ctx context.Context, cl client.Reader, cr *api.Perco
3031
3132func getCredentials (ctx context.Context , cl client.Reader , cr * api.PerconaServerMongoDB , name string , role api.SystemUserRole ) (psmdb.Credentials , error ) {
3233 creds := psmdb.Credentials {}
33- usersSecret , err := getUserSecret (ctx , cl , cr , name )
34+ usersSecret , err := getSecret (ctx , cl , cr , name )
3435 if err != nil {
3536 return creds , errors .Wrap (err , "failed to get user secret" )
3637 }
@@ -62,7 +63,65 @@ func getCredentials(ctx context.Context, cl client.Reader, cr *api.PerconaServer
6263 return creds , nil
6364}
6465
66+ func (r * ReconcilePerconaServerMongoDB ) ensureSecretExistence (ctx context.Context , cr * api.PerconaServerMongoDB ) error {
67+ if cr .Spec .Secrets == nil {
68+ return nil
69+ }
70+
71+ if cr .Spec .Secrets .Users != "" {
72+ if _ , err := getSecret (ctx , r .client , cr , cr .Spec .Secrets .Users ); err != nil {
73+ return fmt .Errorf ("users '%s' secret must exist if specified in the in the manifest: %w" , cr .Spec .Secrets .Users , err )
74+ }
75+ }
76+
77+ if cr .Spec .Secrets .SSL != "" {
78+ if _ , err := getSecret (ctx , r .client , cr , cr .Spec .Secrets .SSL ); err != nil {
79+ return fmt .Errorf ("ssl '%s' secret must exist if specified in the in the manifest: %w" , cr .Spec .Secrets .SSL , err )
80+ }
81+ }
82+
83+ if cr .Spec .Secrets .SSLInternal != "" {
84+ if _ , err := getSecret (ctx , r .client , cr , cr .Spec .Secrets .SSLInternal ); err != nil {
85+ return fmt .Errorf ("ssl internal '%s' secret must exist if specified in the in the manifest: %w" , cr .Spec .Secrets .SSLInternal , err )
86+ }
87+ }
88+
89+ if cr .Spec .Secrets .InternalKey != "" {
90+ if _ , err := getSecret (ctx , r .client , cr , cr .Spec .Secrets .InternalKey ); err != nil {
91+ return fmt .Errorf ("internal key '%s' secret must exist if specified in the in the manifest: %w" , cr .Spec .Secrets .InternalKey , err )
92+ }
93+ }
94+
95+ if cr .Spec .Secrets .EncryptionKey != "" {
96+ if _ , err := getSecret (ctx , r .client , cr , cr .Spec .Secrets .EncryptionKey ); err != nil {
97+ return fmt .Errorf ("encryption key '%s' secret must exist if specified in the in the manifest: %w" , cr .Spec .Secrets .EncryptionKey , err )
98+ }
99+ }
100+
101+ if cr .Spec .Secrets .Vault != "" {
102+ if _ , err := getSecret (ctx , r .client , cr , cr .Spec .Secrets .Vault ); err != nil {
103+ return fmt .Errorf ("vault '%s' secret must exist if specified in the in the manifest: %w" , cr .Spec .Secrets .Vault , err )
104+ }
105+ }
106+
107+ if cr .Spec .Secrets .SSE != "" {
108+ if _ , err := getSecret (ctx , r .client , cr , cr .Spec .Secrets .SSE ); err != nil {
109+ return fmt .Errorf ("sse '%s' secret must exist if specified in the in the manifest: %w" , cr .Spec .Secrets .SSE , err )
110+ }
111+ }
112+
113+ if cr .Spec .Secrets .LDAPSecret != "" {
114+ if _ , err := getSecret (ctx , r .client , cr , cr .Spec .Secrets .LDAPSecret ); err != nil {
115+ return fmt .Errorf ("ldap '%s' secret must exist if specified in the in the manifest: %w" , cr .Spec .Secrets .LDAPSecret , err )
116+ }
117+ }
118+
119+ return nil
120+ }
121+
65122func (r * ReconcilePerconaServerMongoDB ) reconcileUsersSecret (ctx context.Context , cr * api.PerconaServerMongoDB ) error {
123+ log := logf .FromContext (ctx ).WithName ("reconcileUsersSecret" )
124+
66125 secretObj := corev1.Secret {}
67126 err := r .client .Get (ctx ,
68127 types.NamespacedName {
@@ -117,6 +176,8 @@ func (r *ReconcilePerconaServerMongoDB) reconcileUsersSecret(ctx context.Context
117176 return fmt .Errorf ("create Users secret: %v" , err )
118177 }
119178
179+ log .Info ("Created user secrets" , "secret" , cr .Spec .Secrets .Users )
180+
120181 return nil
121182}
122183
0 commit comments