@@ -237,80 +237,10 @@ func (r *OpenStackBackupConfigReconciler) labelResource(ctx context.Context, log
237237 return r .Update (ctx , obj )
238238}
239239
240- // labelResourceRestoreFalse explicitly sets restore: "false" on a resource to
241- // indicate it should not be restored. This makes the exclusion visible.
242- // Also removes restore-order since it's meaningless when restore is disabled.
243- func (r * OpenStackBackupConfigReconciler ) labelResourceRestoreFalse (ctx context.Context , log logr.Logger , obj client.Object ) error {
244- labels := obj .GetLabels ()
245- if labels == nil {
246- labels = make (map [string ]string )
247- }
248-
249- // Check if already set correctly
250- _ , hasOrder := labels [backup .BackupRestoreOrderLabel ]
251- if labels [backup .BackupRestoreLabel ] == "false" && ! hasOrder {
252- return nil
253- }
254-
255- labels [backup .BackupRestoreLabel ] = "false"
256- delete (labels , backup .BackupRestoreOrderLabel )
257- obj .SetLabels (labels )
258-
259- log .Info ("Labeled resource restore=false" , "name" , obj .GetName ())
260- return r .Update (ctx , obj )
261- }
262-
263- // isCertManagerOperatorSecret checks if a secret is managed by cert-manager for an
264- // operator-created (non-CA) Certificate. Such secrets do not need the restore label
265- // because cert-manager will regenerate them from the restored CA Issuer and Certificate CRs.
266- // The secrets are still included in the namespace-wide backup (no label needed for that).
267- //
268- // Returns true (skip restore label) for:
269- // - Operator-created non-CA cert secrets (Certificate CR has ownerRef, isCA != true)
270- //
271- // Returns false (set restore label) for:
272- // - Non-cert-manager secrets
273- // - CA certificate secrets (spec.isCA: true) — must be restored to preserve CA identity
274- // - Secrets from user-created Certificates (no ownerRef on Certificate CR)
275- func (r * OpenStackBackupConfigReconciler ) isCertManagerOperatorSecret (ctx context.Context , log logr.Logger , secret * corev1.Secret ) bool {
276- certName , hasCertAnnotation := secret .Annotations ["cert-manager.io/certificate-name" ]
277- if ! hasCertAnnotation {
278- return false
279- }
280-
281- // Look up the Certificate CR
282- cert := & certmgrv1.Certificate {}
283- if err := r .Get (ctx , types.NamespacedName {
284- Name : certName ,
285- Namespace : secret .Namespace ,
286- }, cert ); err != nil {
287- // Certificate not found — could be deleted, treat secret as user-provided
288- log .V (1 ).Info ("Certificate CR not found for secret, treating as user-provided" ,
289- "secret" , secret .Name , "certificate" , certName )
290- return false
291- }
292-
293- // CA certificates must be restored to preserve the CA identity
294- if cert .Spec .IsCA {
295- log .V (1 ).Info ("Secret is for CA certificate, will be backed up" ,
296- "secret" , secret .Name , "certificate" , certName )
297- return false
298- }
299-
300- // If the Certificate CR has no ownerRef, it's user-created — restore the secret
301- if len (cert .GetOwnerReferences ()) == 0 {
302- return false
303- }
304-
305- // Operator-created, non-CA certificate — cert-manager will regenerate
306- log .V (1 ).Info ("Skipping operator-managed cert secret (will be regenerated)" ,
307- "secret" , secret .Name , "certificate" , certName )
308- return true
309- }
310-
311240// labelSecrets labels secrets in the target namespace.
312- // Secrets managed by cert-manager for operator-created non-CA Certificates get
313- // restore: "false" — cert-manager will regenerate them from the restored CA Issuer.
241+ // Secrets that already have a restore label (set by the controlplane controller
242+ // for cert-manager secrets) are skipped — the operator knows best whether a cert
243+ // secret should be restored or regenerated.
314244// User annotation overrides take precedence over all default behavior.
315245func (r * OpenStackBackupConfigReconciler ) labelSecrets (ctx context.Context , log logr.Logger , instance * backupv1beta1.OpenStackBackupConfig ) (int , error ) {
316246 secretList := & corev1.SecretList {}
@@ -335,16 +265,13 @@ func (r *OpenStackBackupConfigReconciler) labelSecrets(ctx context.Context, log
335265 continue
336266 }
337267
338- if ! shouldLabelResource (secret , instance .Spec .Secrets ) {
268+ // Skip secrets that already have a restore label (set by the operator
269+ // at creation time, e.g. cert-manager CA/leaf cert secrets)
270+ if _ , hasRestoreLabel := secret .Labels [backup .BackupRestoreLabel ]; hasRestoreLabel {
339271 continue
340272 }
341273
342- // Operator-managed non-CA cert secrets: explicitly set restore=false
343- if r .isCertManagerOperatorSecret (ctx , log , secret ) {
344- if err := r .labelResourceRestoreFalse (ctx , log , secret ); err != nil {
345- log .Error (err , "Failed to label cert secret restore=false" , "name" , secret .Name )
346- errs = append (errs , fmt .Errorf ("secret %s: %w" , secret .Name , err ))
347- }
274+ if ! shouldLabelResource (secret , instance .Spec .Secrets ) {
348275 continue
349276 }
350277
0 commit comments