Skip to content

Commit aaaf536

Browse files
committed
Refactor/rename cert-manager implementation
Signed-off-by: ArkaSaha30 <[email protected]>
1 parent 6795152 commit aaaf536

File tree

3 files changed

+44
-43
lines changed

3 files changed

+44
-43
lines changed

pkg/certificate/cert-manager/cert-manager.go renamed to pkg/certificate/cert_manager/provider.go

+37-36
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"crypto/rsa"
88
"crypto/x509"
99
"encoding/pem"
10+
"errors"
1011
"fmt"
1112
"log"
1213
"net"
@@ -16,24 +17,24 @@ import (
1617
certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1"
1718
cmmeta "github.com/cert-manager/cert-manager/pkg/apis/meta/v1"
1819
corev1 "k8s.io/api/core/v1"
19-
"k8s.io/apimachinery/pkg/api/errors"
20+
k8serrors "k8s.io/apimachinery/pkg/api/errors"
2021
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2122
"k8s.io/apimachinery/pkg/runtime"
2223
"sigs.k8s.io/controller-runtime/pkg/client"
2324

2425
interfaces "go.etcd.io/etcd-operator/pkg/certificate/interfaces"
2526
)
2627

27-
type CertManagerProvider struct {
28+
type Provider struct {
2829
client.Client
2930
Scheme *runtime.Scheme
3031
}
3132

32-
func New() *CertManagerProvider {
33-
return &CertManagerProvider{}
33+
func New() *Provider {
34+
return &Provider{}
3435
}
3536

36-
func (cm *CertManagerProvider) createCertificate(
37+
func (cm *Provider) createCertificate(
3738
ctx context.Context,
3839
secretName string,
3940
namespace string,
@@ -56,20 +57,15 @@ func (cm *CertManagerProvider) createCertificate(
5657
},
5758
}
5859

59-
createErr := cm.Create(ctx, certificateResource)
60-
if createErr != nil {
61-
return createErr
62-
}
63-
64-
return nil
60+
return cm.Create(ctx, certificateResource)
6561
}
6662

6763
// parsePrivateKey parses the private key from the PEM-encoded data.
6864
func parsePrivateKey(privateKeyData []byte) (crypto.PrivateKey, error) {
6965
// Try to parse the private key in the format it might be provided in (e.g., PKCS#8, PEM)
7066
block, _ := pem.Decode(privateKeyData)
7167
if block == nil {
72-
return nil, fmt.Errorf("failed to decode private key: invalid PEM")
68+
return nil, errors.New("failed to decode private key: invalid PEM")
7369
}
7470

7571
// Parse the private key from the PEM block
@@ -78,7 +74,7 @@ func parsePrivateKey(privateKeyData []byte) (crypto.PrivateKey, error) {
7874
// Try to parse the private key in another format (e.g., RSA)
7975
privateKey, err = x509.ParsePKCS1PrivateKey(block.Bytes)
8076
if err != nil {
81-
return nil, fmt.Errorf("failed to parse private key: %v", err)
77+
return nil, fmt.Errorf("failed to parse private key: %w", err)
8278
}
8379
}
8480

@@ -92,13 +88,13 @@ func checkKeyPair(cert *x509.Certificate, privateKey crypto.PrivateKey) error {
9288
// Check if the private key matches the certificate by validating the public key
9389
pub := cert.PublicKey.(*rsa.PublicKey)
9490
if !key.PublicKey.Equal(pub) {
95-
return fmt.Errorf("private key does not match the public key in the certificate")
91+
return errors.New("private key does not match the public key in the certificate")
9692
}
9793
case *ecdsa.PrivateKey:
9894
// Check if the private key matches the certificate by validating the public key
9995
pub := cert.PublicKey.(*ecdsa.PublicKey)
10096
if !key.PublicKey.Equal(pub) {
101-
return fmt.Errorf("private key does not match the public key in the certificate")
97+
return errors.New("private key does not match the public key in the certificate")
10298
}
10399
default:
104100
return fmt.Errorf("unsupported private key type: %T", key)
@@ -107,89 +103,94 @@ func checkKeyPair(cert *x509.Certificate, privateKey crypto.PrivateKey) error {
107103
return nil
108104
}
109105

110-
func (cm *CertManagerProvider) EnsureCertificateSecret(
106+
func (cm *Provider) EnsureCertificateSecret(
111107
ctx context.Context,
112108
secretName string,
113109
namespace string,
114110
cfg *interfaces.Config) error {
115111
issuerName, found := cfg.ExtraConfig["issuerName"].(string)
116112
if !found || len(strings.TrimSpace(issuerName)) == 0 {
117-
return fmt.Errorf("issuerName is missing in ExtraConfig")
113+
return errors.New("issuerName is missing in ExtraConfig")
118114
}
119115
issuerKind, found := cfg.ExtraConfig["issuerKind"].(string)
120116
if !found || len(strings.TrimSpace(issuerKind)) == 0 {
121-
return fmt.Errorf("issuerKind is missing in ExtraConfig")
117+
return errors.New("issuerKind is missing in ExtraConfig")
122118
}
123119

124120
checkCertSecret, valErr := cm.ValidateCertificateSecret(ctx, secretName, namespace, cfg)
121+
if valErr != nil {
122+
return fmt.Errorf("invalid certificate secret: %s present in namespace: %s, please delete and try again",
123+
secretName, namespace)
124+
}
125125
if checkCertSecret {
126-
return fmt.Errorf("certificate secret: %s already present in namespace: %s, please delete and try again",
126+
return fmt.Errorf("valid certificate secret: %s already present in namespace: %s , skipping Certificate creation",
127127
secretName, namespace)
128128
}
129-
log.Println(valErr)
129+
log.Printf("certificate secret: %s not present in namespace: %s , creating new Certificate",
130+
secretName, namespace)
130131

131132
return cm.createCertificate(ctx, secretName, namespace, cfg)
132133
}
133134

134-
func (cm *CertManagerProvider) ValidateCertificateSecret(
135+
func (cm *Provider) ValidateCertificateSecret(
135136
ctx context.Context,
136137
secretName string,
137138
namespace string,
138139
_ *interfaces.Config) (bool, error) {
139140
secret := &corev1.Secret{}
140141
err := cm.Get(ctx, client.ObjectKey{Name: secretName, Namespace: namespace}, secret)
141142
if err != nil {
142-
return false, fmt.Errorf("failed to get secret: %v", err)
143+
return false, nil
143144
}
144145

145146
certificateData, exists := secret.Data["tls.crt"]
146147
if !exists {
147-
return false, fmt.Errorf("certificate not found in secret")
148+
return false, errors.New("certificate not found in secret")
148149
}
149150

150151
privateKeyData, keyExists := secret.Data["tls.key"]
151152
if !keyExists {
152-
return false, fmt.Errorf("private key not found in secret")
153+
return false, errors.New("private key not found in secret")
153154
}
154155

155156
parseCert, err := x509.ParseCertificate(certificateData)
156157
if err != nil {
157-
return false, fmt.Errorf("failed to parse certificate: %v", err)
158+
return false, fmt.Errorf("failed to parse certificate: %w", err)
158159
}
159160

160161
if parseCert.NotAfter.Before(time.Now()) {
161-
return false, fmt.Errorf("certificate has expired")
162+
return false, errors.New("certificate has expired")
162163
}
163164

164165
privateKey, err := parsePrivateKey(privateKeyData)
165166
if err != nil {
166-
return false, fmt.Errorf("failed to parse private key: %v", err)
167+
return false, fmt.Errorf("failed to parse private key: %w", err)
167168
}
168169

169-
if err := checkKeyPair(parseCert, privateKey); err != nil {
170-
return false, fmt.Errorf("private key does not match certificate: %v", err)
170+
if checkKeyPairErr := checkKeyPair(parseCert, privateKey); checkKeyPairErr != nil {
171+
return false, fmt.Errorf("private key does not match certificate: %w", checkKeyPairErr)
171172
}
172173

173174
return true, nil
174175
}
175176

176-
func (cm *CertManagerProvider) DeleteCertificateSecret(ctx context.Context, secretName string, namespace string) error {
177+
func (cm *Provider) DeleteCertificateSecret(ctx context.Context, secretName string, namespace string) error {
177178
secret := &corev1.Secret{}
178179
err := cm.Get(ctx, client.ObjectKey{Name: secretName, Namespace: namespace}, secret)
179180
if err != nil {
180-
return fmt.Errorf("failed to get secret: %v", err)
181+
return fmt.Errorf("failed to get secret: %w", err)
181182
}
182183

183184
// Delete the Secret
184185
err = cm.Delete(ctx, secret)
185186
if err != nil {
186-
return fmt.Errorf("failed to delete secret: %v", err)
187+
return fmt.Errorf("failed to delete secret: %w", err)
187188
}
188189

189190
return nil
190191
}
191192

192-
func (cm *CertManagerProvider) RevokeCertificate(ctx context.Context, secretName string, namespace string) error {
193+
func (cm *Provider) RevokeCertificate(ctx context.Context, secretName string, namespace string) error {
193194
cmCertificate := &certmanagerv1.Certificate{}
194195
getCertificateErr := cm.Get(ctx, client.ObjectKey{Name: secretName, Namespace: namespace}, cmCertificate)
195196
if getCertificateErr != nil {
@@ -206,7 +207,7 @@ func (cm *CertManagerProvider) RevokeCertificate(ctx context.Context, secretName
206207
// More info: https://cert-manager.io/docs/usage/certificate/#cleaning-up-secrets-when-certificates-are-deleted
207208
deleteCertificateSecretErr := cm.DeleteCertificateSecret(ctx, secretName, namespace)
208209
if deleteCertificateSecretErr != nil {
209-
if errors.IsNotFound(deleteCertificateSecretErr) {
210+
if k8serrors.IsNotFound(deleteCertificateSecretErr) {
210211
fmt.Println("Certificate secret not found, maybe already deleted")
211212
} else {
212213
return deleteCertificateSecretErr
@@ -217,14 +218,14 @@ func (cm *CertManagerProvider) RevokeCertificate(ctx context.Context, secretName
217218
return nil
218219
}
219220

220-
func (cm *CertManagerProvider) GetCertificateConfig(
221+
func (cm *Provider) GetCertificateConfig(
221222
ctx context.Context,
222223
secretName string,
223224
namespace string) (*interfaces.Config, error) {
224225
cmCertificate := &certmanagerv1.Certificate{}
225226
err := cm.Get(ctx, client.ObjectKey{Name: secretName, Namespace: namespace}, cmCertificate)
226227
if err != nil {
227-
return nil, fmt.Errorf("failed to get certificate: %v", err)
228+
return nil, fmt.Errorf("failed to get certificate: %w", err)
228229
}
229230

230231
cfg := &interfaces.Config{

pkg/certificate/certificate.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package certificate
33
import (
44
"fmt"
55

6-
certManager "go.etcd.io/etcd-operator/pkg/certificate/cert-manager"
6+
"go.etcd.io/etcd-operator/pkg/certificate/cert_manager"
77
certInterface "go.etcd.io/etcd-operator/pkg/certificate/interfaces"
88
)
99

@@ -20,7 +20,7 @@ func NewProvider(pt ProviderType) (certInterface.Provider, error) {
2020
case Auto:
2121
return nil, nil // change me later
2222
case CertManager:
23-
return certManager.New(), nil // change me later
23+
return cert_manager.New(), nil // change me later
2424
}
2525

2626
return nil, fmt.Errorf("unknown provider type: %s", pt)

test/e2e/cert-manager_test.go renamed to test/e2e/certmanager_test.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ import (
99
"sigs.k8s.io/e2e-framework/pkg/envconf"
1010
"sigs.k8s.io/e2e-framework/pkg/features"
1111

12-
certmanager "go.etcd.io/etcd-operator/pkg/certificate/cert-manager"
12+
"go.etcd.io/etcd-operator/pkg/certificate/cert_manager"
1313
interfaces "go.etcd.io/etcd-operator/pkg/certificate/interfaces"
1414
)
1515

16-
func TestCertManagerCM(t *testing.T) {
16+
func TestCertManager(t *testing.T) {
1717
feature := features.New("Cert-Manager Certificate").WithLabel("app", "cert-manager")
1818

1919
feature.Setup(
2020
func(ctx context.Context, t *testing.T, cfg *envconf.Config) context.Context {
21-
cmProvider := certmanager.New()
21+
cmProvider := cert_manager.New()
2222
_, getCertConfigErr := cmProvider.GetCertificateConfig(ctx, "test-cert-secret", cfg.Namespace())
2323
if errors.IsNotFound(getCertConfigErr) {
2424
t.Log(getCertConfigErr)
@@ -43,7 +43,7 @@ func TestCertManagerCM(t *testing.T) {
4343

4444
feature.Assess("Validate certificate secret",
4545
func(ctx context.Context, t *testing.T, cfg *envconf.Config) context.Context {
46-
cmProvider := certmanager.New()
46+
cmProvider := cert_manager.New()
4747
valid, err := cmProvider.ValidateCertificateSecret(ctx, "test-cert-secret", cfg.Namespace(), &interfaces.Config{})
4848
if err != nil {
4949
t.Fatal(err)
@@ -54,7 +54,7 @@ func TestCertManagerCM(t *testing.T) {
5454

5555
feature.Teardown(
5656
func(ctx context.Context, t *testing.T, cfg *envconf.Config) context.Context {
57-
cmProvider := certmanager.New()
57+
cmProvider := cert_manager.New()
5858
deleteSecretErr := cmProvider.DeleteCertificateSecret(ctx, "test-cert-secret", cfg.Namespace())
5959
if errors.IsNotFound(deleteSecretErr) {
6060
t.Log(deleteSecretErr)

0 commit comments

Comments
 (0)