@@ -19,19 +19,19 @@ import (
19
19
corev1 "k8s.io/api/core/v1"
20
20
k8serrors "k8s.io/apimachinery/pkg/api/errors"
21
21
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
22
- "k8s.io/apimachinery/pkg/runtime"
23
22
"sigs.k8s.io/controller-runtime/pkg/client"
24
23
25
24
interfaces "go.etcd.io/etcd-operator/pkg/certificate/interfaces"
26
25
)
27
26
28
27
type Provider struct {
29
28
client.Client
30
- Scheme * runtime.Scheme
31
29
}
32
30
33
- func New () * Provider {
34
- return & Provider {}
31
+ func New (client client.Client ) * Provider {
32
+ return & Provider {
33
+ client ,
34
+ }
35
35
}
36
36
37
37
func (cm * Provider ) createCertificate (
@@ -57,7 +57,7 @@ func (cm *Provider) createCertificate(
57
57
},
58
58
}
59
59
60
- return cm .Create (ctx , certificateResource )
60
+ return cm .Client . Create (ctx , certificateResource )
61
61
}
62
62
63
63
// parsePrivateKey parses the private key from the PEM-encoded data.
@@ -119,8 +119,8 @@ func (cm *Provider) EnsureCertificateSecret(
119
119
120
120
checkCertSecret , valErr := cm .ValidateCertificateSecret (ctx , secretName , namespace , cfg )
121
121
if valErr != nil {
122
- return fmt .Errorf ("invalid certificate secret: %s present in namespace: %s, please delete and try again" ,
123
- secretName , namespace )
122
+ return fmt .Errorf ("invalid certificate secret: %s present in namespace: %s, please delete and try again. \n Error: %s " ,
123
+ secretName , namespace , valErr )
124
124
}
125
125
if checkCertSecret {
126
126
return fmt .Errorf ("valid certificate secret: %s already present in namespace: %s , skipping Certificate creation" ,
@@ -138,7 +138,7 @@ func (cm *Provider) ValidateCertificateSecret(
138
138
namespace string ,
139
139
_ * interfaces.Config ) (bool , error ) {
140
140
secret := & corev1.Secret {}
141
- err := cm .Get (ctx , client.ObjectKey {Name : secretName , Namespace : namespace }, secret )
141
+ err := cm .Client . Get (ctx , client.ObjectKey {Name : secretName , Namespace : namespace }, secret )
142
142
if err != nil {
143
143
return false , nil
144
144
}
@@ -148,12 +148,17 @@ func (cm *Provider) ValidateCertificateSecret(
148
148
return false , errors .New ("certificate not found in secret" )
149
149
}
150
150
151
+ decodeCertificatePem , _ := pem .Decode (certificateData )
152
+ if decodeCertificatePem == nil {
153
+ return false , errors .New ("failed to decode PEM block" )
154
+ }
155
+
151
156
privateKeyData , keyExists := secret .Data ["tls.key" ]
152
157
if ! keyExists {
153
158
return false , errors .New ("private key not found in secret" )
154
159
}
155
160
156
- parseCert , err := x509 .ParseCertificate (certificateData )
161
+ parseCert , err := x509 .ParseCertificate (decodeCertificatePem . Bytes )
157
162
if err != nil {
158
163
return false , fmt .Errorf ("failed to parse certificate: %w" , err )
159
164
}
@@ -176,13 +181,13 @@ func (cm *Provider) ValidateCertificateSecret(
176
181
177
182
func (cm * Provider ) DeleteCertificateSecret (ctx context.Context , secretName string , namespace string ) error {
178
183
secret := & corev1.Secret {}
179
- err := cm .Get (ctx , client.ObjectKey {Name : secretName , Namespace : namespace }, secret )
184
+ err := cm .Client . Get (ctx , client.ObjectKey {Name : secretName , Namespace : namespace }, secret )
180
185
if err != nil {
181
186
return fmt .Errorf ("failed to get secret: %w" , err )
182
187
}
183
188
184
189
// Delete the Secret
185
- err = cm .Delete (ctx , secret )
190
+ err = cm .Client . Delete (ctx , secret )
186
191
if err != nil {
187
192
return fmt .Errorf ("failed to delete secret: %w" , err )
188
193
}
@@ -192,12 +197,12 @@ func (cm *Provider) DeleteCertificateSecret(ctx context.Context, secretName stri
192
197
193
198
func (cm * Provider ) RevokeCertificate (ctx context.Context , secretName string , namespace string ) error {
194
199
cmCertificate := & certmanagerv1.Certificate {}
195
- getCertificateErr := cm .Get (ctx , client.ObjectKey {Name : secretName , Namespace : namespace }, cmCertificate )
200
+ getCertificateErr := cm .Client . Get (ctx , client.ObjectKey {Name : secretName , Namespace : namespace }, cmCertificate )
196
201
if getCertificateErr != nil {
197
202
return getCertificateErr
198
203
}
199
204
200
- deleteCertificateErr := cm .Delete (ctx , cmCertificate )
205
+ deleteCertificateErr := cm .Client . Delete (ctx , cmCertificate )
201
206
if deleteCertificateErr != nil {
202
207
return deleteCertificateErr
203
208
}
@@ -223,7 +228,7 @@ func (cm *Provider) GetCertificateConfig(
223
228
secretName string ,
224
229
namespace string ) (* interfaces.Config , error ) {
225
230
cmCertificate := & certmanagerv1.Certificate {}
226
- err := cm .Get (ctx , client.ObjectKey {Name : secretName , Namespace : namespace }, cmCertificate )
231
+ err := cm .Client . Get (ctx , client.ObjectKey {Name : secretName , Namespace : namespace }, cmCertificate )
227
232
if err != nil {
228
233
return nil , fmt .Errorf ("failed to get certificate: %w" , err )
229
234
}
0 commit comments