Skip to content

Commit 8ea7a31

Browse files
Merge pull request #1980 from p0lyn0mial/refactor-setSigningCertKeyPairSecret
operator/certrotation/signer: decouple setting annotation from setSigningCertKeyPairSecret into a separate fn
2 parents 4760434 + 7230dc0 commit 8ea7a31

File tree

3 files changed

+34
-13
lines changed

3 files changed

+34
-13
lines changed

pkg/operator/certrotation/metadata.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
66
)
77

8-
func ensureMetadataUpdate(secret *corev1.Secret, owner *metav1.OwnerReference, additionalAnnotations AdditionalAnnotations) bool {
8+
func ensureOwnerRefAndTLSAnnotations(secret *corev1.Secret, owner *metav1.OwnerReference, additionalAnnotations AdditionalAnnotations) bool {
99
needsMetadataUpdate := false
1010
// no ownerReference set
1111
if owner != nil {

pkg/operator/certrotation/signer.go

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func (c RotatedSigningCASecret) EnsureSigningCertKeyPair(ctx context.Context) (*
8080

8181
// run Update if metadata needs changing unless we're in RefreshOnlyWhenExpired mode
8282
if !c.RefreshOnlyWhenExpired {
83-
needsMetadataUpdate := ensureMetadataUpdate(signingCertKeyPairSecret, c.Owner, c.AdditionalAnnotations)
83+
needsMetadataUpdate := ensureOwnerRefAndTLSAnnotations(signingCertKeyPairSecret, c.Owner, c.AdditionalAnnotations)
8484
needsTypeChange := ensureSecretTLSTypeSet(signingCertKeyPairSecret)
8585
updateRequired = needsMetadataUpdate || needsTypeChange
8686
}
@@ -92,7 +92,7 @@ func (c RotatedSigningCASecret) EnsureSigningCertKeyPair(ctx context.Context) (*
9292
reason = "secret doesn't exist"
9393
}
9494
c.EventRecorder.Eventf("SignerUpdateRequired", "%q in %q requires a new signing cert/key pair: %v", c.Name, c.Namespace, reason)
95-
if err := setSigningCertKeyPairSecret(signingCertKeyPairSecret, c.Validity, c.AdditionalAnnotations); err != nil {
95+
if err = setSigningCertKeyPairSecretAndTLSAnnotations(signingCertKeyPairSecret, c.Validity, c.AdditionalAnnotations); err != nil {
9696
return nil, false, err
9797
}
9898

@@ -199,18 +199,30 @@ func getValidityFromAnnotations(annotations map[string]string) (notBefore time.T
199199
return notBefore, notAfter, ""
200200
}
201201

202+
// setSigningCertKeyPairSecretAndTLSAnnotations generates a new signing certificate and key pair,
203+
// stores them in the specified secret, and adds predefined TLS annotations to that secret.
204+
func setSigningCertKeyPairSecretAndTLSAnnotations(signingCertKeyPairSecret *corev1.Secret, validity time.Duration, tlsAnnotations AdditionalAnnotations) error {
205+
ca, err := setSigningCertKeyPairSecret(signingCertKeyPairSecret, validity)
206+
if err != nil {
207+
return err
208+
}
209+
210+
setTLSAnnotationsOnSigningCertKeyPairSecret(signingCertKeyPairSecret, ca, tlsAnnotations)
211+
return nil
212+
}
213+
202214
// setSigningCertKeyPairSecret creates a new signing cert/key pair and sets them in the secret
203-
func setSigningCertKeyPairSecret(signingCertKeyPairSecret *corev1.Secret, validity time.Duration, annotations AdditionalAnnotations) error {
215+
func setSigningCertKeyPairSecret(signingCertKeyPairSecret *corev1.Secret, validity time.Duration) (*crypto.TLSCertificateConfig, error) {
204216
signerName := fmt.Sprintf("%s_%s@%d", signingCertKeyPairSecret.Namespace, signingCertKeyPairSecret.Name, time.Now().Unix())
205217
ca, err := crypto.MakeSelfSignedCAConfigForDuration(signerName, validity)
206218
if err != nil {
207-
return err
219+
return nil, err
208220
}
209221

210222
certBytes := &bytes.Buffer{}
211223
keyBytes := &bytes.Buffer{}
212-
if err := ca.WriteCertConfig(certBytes, keyBytes); err != nil {
213-
return err
224+
if err = ca.WriteCertConfig(certBytes, keyBytes); err != nil {
225+
return nil, err
214226
}
215227

216228
if signingCertKeyPairSecret.Annotations == nil {
@@ -221,11 +233,20 @@ func setSigningCertKeyPairSecret(signingCertKeyPairSecret *corev1.Secret, validi
221233
}
222234
signingCertKeyPairSecret.Data["tls.crt"] = certBytes.Bytes()
223235
signingCertKeyPairSecret.Data["tls.key"] = keyBytes.Bytes()
224-
annotations.NotBefore = ca.Certs[0].NotBefore.Format(time.RFC3339)
225-
annotations.NotAfter = ca.Certs[0].NotAfter.Format(time.RFC3339)
226-
signingCertKeyPairSecret.Annotations[CertificateIssuer] = ca.Certs[0].Issuer.CommonName
236+
return ca, nil
237+
}
227238

228-
_ = annotations.EnsureTLSMetadataUpdate(&signingCertKeyPairSecret.ObjectMeta)
239+
// setTLSAnnotationsOnSigningCertKeyPairSecret applies predefined TLS annotations to the given secret.
240+
//
241+
// This function does not perform nil checks on its parameters and assumes that the
242+
// secret's Annotations field has already been initialized.
243+
//
244+
// These assumptions are safe because this function is only called after the secret
245+
// has been initialized in setSigningCertKeyPairSecret.
246+
func setTLSAnnotationsOnSigningCertKeyPairSecret(signingCertKeyPairSecret *corev1.Secret, ca *crypto.TLSCertificateConfig, tlsAnnotations AdditionalAnnotations) {
247+
signingCertKeyPairSecret.Annotations[CertificateIssuer] = ca.Certs[0].Issuer.CommonName
229248

230-
return nil
249+
tlsAnnotations.NotBefore = ca.Certs[0].NotBefore.Format(time.RFC3339)
250+
tlsAnnotations.NotAfter = ca.Certs[0].NotAfter.Format(time.RFC3339)
251+
_ = tlsAnnotations.EnsureTLSMetadataUpdate(&signingCertKeyPairSecret.ObjectMeta)
231252
}

pkg/operator/certrotation/target.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func (c RotatedSelfSignedCertKeySecret) EnsureTargetCertKeyPair(ctx context.Cont
114114

115115
// run Update if metadata needs changing unless we're in RefreshOnlyWhenExpired mode
116116
if !c.RefreshOnlyWhenExpired {
117-
needsMetadataUpdate := ensureMetadataUpdate(targetCertKeyPairSecret, c.Owner, c.AdditionalAnnotations)
117+
needsMetadataUpdate := ensureOwnerRefAndTLSAnnotations(targetCertKeyPairSecret, c.Owner, c.AdditionalAnnotations)
118118
needsTypeChange := ensureSecretTLSTypeSet(targetCertKeyPairSecret)
119119
updateRequired = needsMetadataUpdate || needsTypeChange
120120
}

0 commit comments

Comments
 (0)