Skip to content

Commit 9723791

Browse files
Merge pull request #1982 from p0lyn0mial/refactor-setTargetCertKeyPairSecret
operator/certrotation/target: decouple setting annotation from setTargetCertKeyPairSecret into a seperate fn
2 parents 8ea7a31 + 9a796b6 commit 9723791

File tree

1 file changed

+30
-11
lines changed

1 file changed

+30
-11
lines changed

pkg/operator/certrotation/target.go

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ func (c RotatedSelfSignedCertKeySecret) EnsureTargetCertKeyPair(ctx context.Cont
121121

122122
if reason := c.CertCreator.NeedNewTargetCertKeyPair(targetCertKeyPairSecret, signingCertKeyPair, caBundleCerts, c.Refresh, c.RefreshOnlyWhenExpired, creationRequired); len(reason) > 0 {
123123
c.EventRecorder.Eventf("TargetUpdateRequired", "%q in %q requires a new target cert/key pair: %v", c.Name, c.Namespace, reason)
124-
if err := setTargetCertKeyPairSecret(targetCertKeyPairSecret, c.Validity, signingCertKeyPair, c.CertCreator, c.AdditionalAnnotations); err != nil {
124+
if err = setTargetCertKeyPairSecretAndTLSAnnotations(targetCertKeyPairSecret, c.Validity, signingCertKeyPair, c.CertCreator, c.AdditionalAnnotations); err != nil {
125125
return nil, err
126126
}
127127

@@ -232,9 +232,21 @@ func needNewTargetCertKeyPairForTime(annotations map[string]string, signer *cryp
232232
return ""
233233
}
234234

235+
// setTargetCertKeyPairSecretAndTLSAnnotations generates a new cert/key pair,
236+
// stores them in the specified secret, and adds predefined TLS annotations to that secret.
237+
func setTargetCertKeyPairSecretAndTLSAnnotations(targetCertKeyPairSecret *corev1.Secret, validity time.Duration, signer *crypto.CA, certCreator TargetCertCreator, tlsAnnotations AdditionalAnnotations) error {
238+
certKeyPair, err := setTargetCertKeyPairSecret(targetCertKeyPairSecret, validity, signer, certCreator)
239+
if err != nil {
240+
return err
241+
}
242+
243+
setTLSAnnotationsOnTargetCertKeyPairSecret(targetCertKeyPairSecret, certKeyPair, certCreator, tlsAnnotations)
244+
return nil
245+
}
246+
235247
// setTargetCertKeyPairSecret creates a new cert/key pair and sets them in the secret. Only one of client, serving, or signer rotation may be specified.
236248
// TODO refactor with an interface for actually signing and move the one-of check higher in the stack.
237-
func setTargetCertKeyPairSecret(targetCertKeyPairSecret *corev1.Secret, validity time.Duration, signer *crypto.CA, certCreator TargetCertCreator, annotations AdditionalAnnotations) error {
249+
func setTargetCertKeyPairSecret(targetCertKeyPairSecret *corev1.Secret, validity time.Duration, signer *crypto.CA, certCreator TargetCertCreator) (*crypto.TLSCertificateConfig, error) {
238250
if targetCertKeyPairSecret.Annotations == nil {
239251
targetCertKeyPairSecret.Annotations = map[string]string{}
240252
}
@@ -251,21 +263,28 @@ func setTargetCertKeyPairSecret(targetCertKeyPairSecret *corev1.Secret, validity
251263

252264
certKeyPair, err := certCreator.NewCertificate(signer, targetValidity)
253265
if err != nil {
254-
return err
266+
return nil, err
255267
}
256268

257269
targetCertKeyPairSecret.Data["tls.crt"], targetCertKeyPairSecret.Data["tls.key"], err = certKeyPair.GetPEMBytes()
258-
if err != nil {
259-
return err
260-
}
261-
annotations.NotBefore = certKeyPair.Certs[0].NotBefore.Format(time.RFC3339)
262-
annotations.NotAfter = certKeyPair.Certs[0].NotAfter.Format(time.RFC3339)
270+
return certKeyPair, err
271+
}
272+
273+
// setTLSAnnotationsOnTargetCertKeyPairSecret applies predefined TLS annotations to the given secret.
274+
//
275+
// This function does not perform nil checks on its parameters and assumes that the
276+
// secret's Annotations field has already been initialized.
277+
//
278+
// These assumptions are safe because this function is only called after the secret
279+
// has been initialized in setTargetCertKeyPairSecret.
280+
func setTLSAnnotationsOnTargetCertKeyPairSecret(targetCertKeyPairSecret *corev1.Secret, certKeyPair *crypto.TLSCertificateConfig, certCreator TargetCertCreator, tlsAnnotations AdditionalAnnotations) {
263281
targetCertKeyPairSecret.Annotations[CertificateIssuer] = certKeyPair.Certs[0].Issuer.CommonName
264282

265-
_ = annotations.EnsureTLSMetadataUpdate(&targetCertKeyPairSecret.ObjectMeta)
266-
certCreator.SetAnnotations(certKeyPair, targetCertKeyPairSecret.Annotations)
283+
tlsAnnotations.NotBefore = certKeyPair.Certs[0].NotBefore.Format(time.RFC3339)
284+
tlsAnnotations.NotAfter = certKeyPair.Certs[0].NotAfter.Format(time.RFC3339)
285+
_ = tlsAnnotations.EnsureTLSMetadataUpdate(&targetCertKeyPairSecret.ObjectMeta)
267286

268-
return nil
287+
certCreator.SetAnnotations(certKeyPair, targetCertKeyPairSecret.Annotations)
269288
}
270289

271290
type ClientRotation struct {

0 commit comments

Comments
 (0)