1
1
package controllers
2
2
3
3
import (
4
+ "context"
4
5
"crypto/sha256"
5
6
"fmt"
6
7
"strings"
@@ -35,15 +36,15 @@ const (
35
36
)
36
37
37
38
// validateTLSConfig will check that the configured ConfigMap and Secret exist and that they have the correct fields.
38
- func (r * ReplicaSetReconciler ) validateTLSConfig (mdb mdbv1.MongoDBCommunity ) (bool , error ) {
39
+ func (r * ReplicaSetReconciler ) validateTLSConfig (ctx context. Context , mdb mdbv1.MongoDBCommunity ) (bool , error ) {
39
40
if ! mdb .Spec .Security .TLS .Enabled {
40
41
return true , nil
41
42
}
42
43
43
44
r .log .Info ("Ensuring TLS is correctly configured" )
44
45
45
46
// Ensure CA cert is configured
46
- _ , err := getCaCrt (r .client , r .client , mdb )
47
+ _ , err := getCaCrt (ctx , r .client , r .client , mdb )
47
48
48
49
if err != nil {
49
50
if apiErrors .IsNotFound (err ) {
@@ -55,7 +56,7 @@ func (r *ReplicaSetReconciler) validateTLSConfig(mdb mdbv1.MongoDBCommunity) (bo
55
56
}
56
57
57
58
// Ensure Secret exists
58
- _ , err = secret .ReadStringData (r .client , mdb .TLSSecretNamespacedName ())
59
+ _ , err = secret .ReadStringData (ctx , r .client , mdb .TLSSecretNamespacedName ())
59
60
if err != nil {
60
61
if apiErrors .IsNotFound (err ) {
61
62
r .log .Warnf (`Secret "%s" not found` , mdb .TLSSecretNamespacedName ())
@@ -67,20 +68,20 @@ func (r *ReplicaSetReconciler) validateTLSConfig(mdb mdbv1.MongoDBCommunity) (bo
67
68
68
69
// validate whether the secret contains "tls.crt" and "tls.key", or it contains "tls.pem"
69
70
// if it contains all three, then the pem entry should be equal to the concatenation of crt and key
70
- _ , err = getPemOrConcatenatedCrtAndKey (r .client , mdb , mdb .TLSSecretNamespacedName ())
71
+ _ , err = getPemOrConcatenatedCrtAndKey (ctx , r .client , mdb , mdb .TLSSecretNamespacedName ())
71
72
if err != nil {
72
73
r .log .Warnf (err .Error ())
73
74
return false , nil
74
75
}
75
76
76
77
// Watch certificate-key secret to handle rotations
77
- r .secretWatcher .Watch (mdb .TLSSecretNamespacedName (), mdb .NamespacedName ())
78
+ r .secretWatcher .Watch (ctx , mdb .TLSSecretNamespacedName (), mdb .NamespacedName ())
78
79
79
80
// Watch CA certificate changes
80
81
if mdb .Spec .Security .TLS .CaCertificateSecret != nil {
81
- r .secretWatcher .Watch (mdb .TLSCaCertificateSecretNamespacedName (), mdb .NamespacedName ())
82
+ r .secretWatcher .Watch (ctx , mdb .TLSCaCertificateSecretNamespacedName (), mdb .NamespacedName ())
82
83
} else {
83
- r .configMapWatcher .Watch (mdb .TLSConfigMapNamespacedName (), mdb .NamespacedName ())
84
+ r .configMapWatcher .Watch (ctx , mdb .TLSConfigMapNamespacedName (), mdb .NamespacedName ())
84
85
}
85
86
86
87
r .log .Infof ("Successfully validated TLS config" )
@@ -89,17 +90,17 @@ func (r *ReplicaSetReconciler) validateTLSConfig(mdb mdbv1.MongoDBCommunity) (bo
89
90
90
91
// getTLSConfigModification creates a modification function which enables TLS in the automation config.
91
92
// It will also ensure that the combined cert-key secret is created.
92
- func getTLSConfigModification (cmGetter configmap.Getter , secretGetter secret.Getter , mdb mdbv1.MongoDBCommunity ) (automationconfig.Modification , error ) {
93
+ func getTLSConfigModification (ctx context. Context , cmGetter configmap.Getter , secretGetter secret.Getter , mdb mdbv1.MongoDBCommunity ) (automationconfig.Modification , error ) {
93
94
if ! mdb .Spec .Security .TLS .Enabled {
94
95
return automationconfig .NOOP (), nil
95
96
}
96
97
97
- caCert , err := getCaCrt (cmGetter , secretGetter , mdb )
98
+ caCert , err := getCaCrt (ctx , cmGetter , secretGetter , mdb )
98
99
if err != nil {
99
100
return automationconfig .NOOP (), err
100
101
}
101
102
102
- certKey , err := getPemOrConcatenatedCrtAndKey (secretGetter , mdb , mdb .TLSSecretNamespacedName ())
103
+ certKey , err := getPemOrConcatenatedCrtAndKey (ctx , secretGetter , mdb , mdb .TLSSecretNamespacedName ())
103
104
if err != nil {
104
105
return automationconfig .NOOP (), err
105
106
}
@@ -108,13 +109,13 @@ func getTLSConfigModification(cmGetter configmap.Getter, secretGetter secret.Get
108
109
}
109
110
110
111
// getCertAndKey will fetch the certificate and key from the user-provided Secret.
111
- func getCertAndKey (getter secret.Getter , mdb mdbv1.MongoDBCommunity , secretName types.NamespacedName ) string {
112
- cert , err := secret .ReadKey (getter , tlsSecretCertName , secretName )
112
+ func getCertAndKey (ctx context. Context , getter secret.Getter , mdb mdbv1.MongoDBCommunity , secretName types.NamespacedName ) string {
113
+ cert , err := secret .ReadKey (ctx , getter , tlsSecretCertName , secretName )
113
114
if err != nil {
114
115
return ""
115
116
}
116
117
117
- key , err := secret .ReadKey (getter , tlsSecretKeyName , secretName )
118
+ key , err := secret .ReadKey (ctx , getter , tlsSecretKeyName , secretName )
118
119
if err != nil {
119
120
return ""
120
121
}
@@ -123,8 +124,8 @@ func getCertAndKey(getter secret.Getter, mdb mdbv1.MongoDBCommunity, secretName
123
124
}
124
125
125
126
// getPem will fetch the pem from the user-provided secret
126
- func getPem (getter secret.Getter , mdb mdbv1.MongoDBCommunity , secretName types.NamespacedName ) string {
127
- pem , err := secret .ReadKey (getter , tlsSecretPemName , secretName )
127
+ func getPem (ctx context. Context , getter secret.Getter , mdb mdbv1.MongoDBCommunity , secretName types.NamespacedName ) string {
128
+ pem , err := secret .ReadKey (ctx , getter , tlsSecretPemName , secretName )
128
129
if err != nil {
129
130
return ""
130
131
}
@@ -141,9 +142,9 @@ func combineCertificateAndKey(cert, key string) string {
141
142
// This is either the tls.pem entry in the given secret, or the concatenation
142
143
// of tls.crt and tls.key
143
144
// It performs a basic validation on the entries.
144
- func getPemOrConcatenatedCrtAndKey (getter secret.Getter , mdb mdbv1.MongoDBCommunity , secretName types.NamespacedName ) (string , error ) {
145
- certKey := getCertAndKey (getter , mdb , secretName )
146
- pem := getPem (getter , mdb , secretName )
145
+ func getPemOrConcatenatedCrtAndKey (ctx context. Context , getter secret.Getter , mdb mdbv1.MongoDBCommunity , secretName types.NamespacedName ) (string , error ) {
146
+ certKey := getCertAndKey (ctx , getter , mdb , secretName )
147
+ pem := getPem (ctx , getter , mdb , secretName )
147
148
if certKey == "" && pem == "" {
148
149
return "" , fmt .Errorf (`neither "%s" nor the pair "%s"/"%s" were present in the TLS secret` , tlsSecretPemName , tlsSecretCertName , tlsSecretKeyName )
149
150
}
@@ -159,16 +160,16 @@ func getPemOrConcatenatedCrtAndKey(getter secret.Getter, mdb mdbv1.MongoDBCommun
159
160
return certKey , nil
160
161
}
161
162
162
- func getCaCrt (cmGetter configmap.Getter , secretGetter secret.Getter , mdb mdbv1.MongoDBCommunity ) (string , error ) {
163
+ func getCaCrt (ctx context. Context , cmGetter configmap.Getter , secretGetter secret.Getter , mdb mdbv1.MongoDBCommunity ) (string , error ) {
163
164
var caResourceName types.NamespacedName
164
165
var caData map [string ]string
165
166
var err error
166
167
if mdb .Spec .Security .TLS .CaCertificateSecret != nil {
167
168
caResourceName = mdb .TLSCaCertificateSecretNamespacedName ()
168
- caData , err = secret .ReadStringData (secretGetter , caResourceName )
169
+ caData , err = secret .ReadStringData (ctx , secretGetter , caResourceName )
169
170
} else if mdb .Spec .Security .TLS .CaConfigMap != nil {
170
171
caResourceName = mdb .TLSConfigMapNamespacedName ()
171
- caData , err = configmap .ReadData (cmGetter , caResourceName )
172
+ caData , err = configmap .ReadData (ctx , cmGetter , caResourceName )
172
173
}
173
174
174
175
if err != nil {
@@ -188,8 +189,8 @@ func getCaCrt(cmGetter configmap.Getter, secretGetter secret.Getter, mdb mdbv1.M
188
189
189
190
// ensureCASecret will create or update the operator managed Secret containing
190
191
// the CA certficate from the user provided Secret or ConfigMap.
191
- func ensureCASecret (cmGetter configmap.Getter , secretGetter secret.Getter , getUpdateCreator secret.GetUpdateCreator , mdb mdbv1.MongoDBCommunity ) error {
192
- cert , err := getCaCrt (cmGetter , secretGetter , mdb )
192
+ func ensureCASecret (ctx context. Context , cmGetter configmap.Getter , secretGetter secret.Getter , getUpdateCreator secret.GetUpdateCreator , mdb mdbv1.MongoDBCommunity ) error {
193
+ cert , err := getCaCrt (ctx , cmGetter , secretGetter , mdb )
193
194
if err != nil {
194
195
return err
195
196
}
@@ -203,13 +204,13 @@ func ensureCASecret(cmGetter configmap.Getter, secretGetter secret.Getter, getUp
203
204
SetOwnerReferences (mdb .GetOwnerReferences ()).
204
205
Build ()
205
206
206
- return secret .CreateOrUpdate (getUpdateCreator , operatorSecret )
207
+ return secret .CreateOrUpdate (ctx , getUpdateCreator , operatorSecret )
207
208
}
208
209
209
210
// ensureTLSSecret will create or update the operator-managed Secret containing
210
211
// the concatenated certificate and key from the user-provided Secret.
211
- func ensureTLSSecret (getUpdateCreator secret.GetUpdateCreator , mdb mdbv1.MongoDBCommunity ) error {
212
- certKey , err := getPemOrConcatenatedCrtAndKey (getUpdateCreator , mdb , mdb .TLSSecretNamespacedName ())
212
+ func ensureTLSSecret (ctx context. Context , getUpdateCreator secret.GetUpdateCreator , mdb mdbv1.MongoDBCommunity ) error {
213
+ certKey , err := getPemOrConcatenatedCrtAndKey (ctx , getUpdateCreator , mdb , mdb .TLSSecretNamespacedName ())
213
214
if err != nil {
214
215
return err
215
216
}
@@ -223,15 +224,15 @@ func ensureTLSSecret(getUpdateCreator secret.GetUpdateCreator, mdb mdbv1.MongoDB
223
224
SetOwnerReferences (mdb .GetOwnerReferences ()).
224
225
Build ()
225
226
226
- return secret .CreateOrUpdate (getUpdateCreator , operatorSecret )
227
+ return secret .CreateOrUpdate (ctx , getUpdateCreator , operatorSecret )
227
228
}
228
229
229
- func ensureAgentCertSecret (getUpdateCreator secret.GetUpdateCreator , mdb mdbv1.MongoDBCommunity ) error {
230
+ func ensureAgentCertSecret (ctx context. Context , getUpdateCreator secret.GetUpdateCreator , mdb mdbv1.MongoDBCommunity ) error {
230
231
if mdb .Spec .GetAgentAuthMode () != "X509" {
231
232
return nil
232
233
}
233
234
234
- certKey , err := getPemOrConcatenatedCrtAndKey (getUpdateCreator , mdb , mdb .AgentCertificateSecretNamespacedName ())
235
+ certKey , err := getPemOrConcatenatedCrtAndKey (ctx , getUpdateCreator , mdb , mdb .AgentCertificateSecretNamespacedName ())
235
236
if err != nil {
236
237
return err
237
238
}
@@ -243,13 +244,13 @@ func ensureAgentCertSecret(getUpdateCreator secret.GetUpdateCreator, mdb mdbv1.M
243
244
SetOwnerReferences (mdb .GetOwnerReferences ()).
244
245
Build ()
245
246
246
- return secret .CreateOrUpdate (getUpdateCreator , agentCertSecret )
247
+ return secret .CreateOrUpdate (ctx , getUpdateCreator , agentCertSecret )
247
248
}
248
249
249
250
// ensurePrometheusTLSSecret will create or update the operator-managed Secret containing
250
251
// the concatenated certificate and key from the user-provided Secret.
251
- func ensurePrometheusTLSSecret (getUpdateCreator secret.GetUpdateCreator , mdb mdbv1.MongoDBCommunity ) error {
252
- certKey , err := getPemOrConcatenatedCrtAndKey (getUpdateCreator , mdb , mdb .DeepCopy ().PrometheusTLSSecretNamespacedName ())
252
+ func ensurePrometheusTLSSecret (ctx context. Context , getUpdateCreator secret.GetUpdateCreator , mdb mdbv1.MongoDBCommunity ) error {
253
+ certKey , err := getPemOrConcatenatedCrtAndKey (ctx , getUpdateCreator , mdb , mdb .DeepCopy ().PrometheusTLSSecretNamespacedName ())
253
254
if err != nil {
254
255
return err
255
256
}
@@ -263,7 +264,7 @@ func ensurePrometheusTLSSecret(getUpdateCreator secret.GetUpdateCreator, mdb mdb
263
264
SetOwnerReferences (mdb .GetOwnerReferences ()).
264
265
Build ()
265
266
266
- return secret .CreateOrUpdate (getUpdateCreator , operatorSecret )
267
+ return secret .CreateOrUpdate (ctx , getUpdateCreator , operatorSecret )
267
268
}
268
269
269
270
// tlsOperatorSecretFileName calculates the file name to use for the mounted
0 commit comments