@@ -295,58 +295,44 @@ func (r *SecretProviderClassPodStatusReconciler) Reconcile(ctx context.Context,
295
295
errs = append (errs , fmt .Errorf ("failed to validate secret object in spc %s/%s, err: %w" , spc .Namespace , spc .Name , err ))
296
296
continue
297
297
}
298
- exists , err := r .secretExists (ctx , secretName , req .Namespace )
299
- if err != nil {
300
- klog .ErrorS (err , "failed to check if secret exists" , "secret" , klog.ObjectRef {Namespace : req .Namespace , Name : secretName }, "spc" , klog .KObj (spc ), "pod" , klog .KObj (pod ), "spcps" , klog .KObj (spcPodStatus ))
301
- // syncSecret.enabled is set to false by default in the helm chart for installing the driver in v0.0.23+
302
- // that would result in a forbidden error, so generate a warning that can be helpful for debugging
303
- if apierrors .IsForbidden (err ) {
304
- klog .Warning (SyncSecretForbiddenWarning )
305
- }
306
- errs = append (errs , fmt .Errorf ("failed to check if secret %s exists, err: %w" , secretName , err ))
307
- continue
308
- }
309
298
310
299
var funcs []func () (bool , error )
300
+ secretType := secretutil .GetSecretType (strings .TrimSpace (secretObj .Type ))
311
301
312
- if ! exists {
313
- secretType := secretutil .GetSecretType (strings .TrimSpace (secretObj .Type ))
314
-
315
- var datamap map [string ][]byte
316
- if datamap , err = secretutil .GetSecretData (secretObj .Data , secretType , files ); err != nil {
317
- r .generateEvent (pod , corev1 .EventTypeWarning , secretCreationFailedReason , fmt .Sprintf ("failed to get data in spc %s/%s for secret %s, err: %+v" , req .Namespace , spcName , secretName , err ))
318
- klog .ErrorS (err , "failed to get data in spc for secret" , "spc" , klog .KObj (spc ), "pod" , klog .KObj (pod ), "secret" , klog.ObjectRef {Namespace : req .Namespace , Name : secretName }, "spcps" , klog .KObj (spcPodStatus ))
319
- errs = append (errs , fmt .Errorf ("failed to get data in spc %s/%s for secret %s, err: %w" , req .Namespace , spcName , secretName , err ))
320
- continue
321
- }
302
+ var datamap map [string ][]byte
303
+ if datamap , err = secretutil .GetSecretData (secretObj .Data , secretType , files ); err != nil {
304
+ r .generateEvent (pod , corev1 .EventTypeWarning , secretCreationFailedReason , fmt .Sprintf ("failed to get data in spc %s/%s for secret %s, err: %+v" , req .Namespace , spcName , secretName , err ))
305
+ klog .ErrorS (err , "failed to get data in spc for secret" , "spc" , klog .KObj (spc ), "pod" , klog .KObj (pod ), "secret" , klog.ObjectRef {Namespace : req .Namespace , Name : secretName }, "spcps" , klog .KObj (spcPodStatus ))
306
+ errs = append (errs , fmt .Errorf ("failed to get data in spc %s/%s for secret %s, err: %w" , req .Namespace , spcName , secretName , err ))
307
+ continue
308
+ }
322
309
323
- labelsMap := make (map [string ]string )
324
- if secretObj .Labels != nil {
325
- labelsMap = secretObj .Labels
326
- }
327
- annotationsMap := make (map [string ]string )
328
- if secretObj .Annotations != nil {
329
- annotationsMap = secretObj .Annotations
330
- }
331
- // Set secrets-store.csi.k8s.io/managed=true label on the secret that's created and managed
332
- // by the secrets-store-csi-driver. This label will be used to perform a filtered list watch
333
- // only on secrets created and managed by the driver
334
- labelsMap [SecretManagedLabel ] = "true"
335
-
336
- createFn := func () (bool , error ) {
337
- if err := r .createK8sSecret (ctx , secretName , req .Namespace , datamap , labelsMap , annotationsMap , secretType ); err != nil {
338
- klog .ErrorS (err , "failed to create Kubernetes secret" , "spc" , klog .KObj (spc ), "pod" , klog .KObj (pod ), "secret" , klog.ObjectRef {Namespace : req .Namespace , Name : secretName }, "spcps" , klog .KObj (spcPodStatus ))
339
- // syncSecret.enabled is set to false by default in the helm chart for installing the driver in v0.0.23+
340
- // that would result in a forbidden error, so generate a warning that can be helpful for debugging
341
- if apierrors .IsForbidden (err ) {
342
- klog .Warning (SyncSecretForbiddenWarning )
343
- }
344
- return false , nil
310
+ labelsMap := make (map [string ]string )
311
+ if secretObj .Labels != nil {
312
+ labelsMap = secretObj .Labels
313
+ }
314
+ annotationsMap := make (map [string ]string )
315
+ if secretObj .Annotations != nil {
316
+ annotationsMap = secretObj .Annotations
317
+ }
318
+ // Set secrets-store.csi.k8s.io/managed=true label on the secret that's created and managed
319
+ // by the secrets-store-csi-driver. This label will be used to perform a filtered list watch
320
+ // only on secrets created and managed by the driver
321
+ labelsMap [SecretManagedLabel ] = "true"
322
+
323
+ createFn := func () (bool , error ) {
324
+ if err := r .createOrUpdateK8sSecret (ctx , secretName , req .Namespace , datamap , labelsMap , annotationsMap , secretType ); err != nil {
325
+ klog .ErrorS (err , "failed to create Kubernetes secret" , "spc" , klog .KObj (spc ), "pod" , klog .KObj (pod ), "secret" , klog.ObjectRef {Namespace : req .Namespace , Name : secretName }, "spcps" , klog .KObj (spcPodStatus ))
326
+ // syncSecret.enabled is set to false by default in the helm chart for installing the driver in v0.0.23+
327
+ // that would result in a forbidden error, so generate a warning that can be helpful for debugging
328
+ if apierrors .IsForbidden (err ) {
329
+ klog .Warning (SyncSecretForbiddenWarning )
345
330
}
346
- return true , nil
331
+ return false , nil
347
332
}
348
- funcs = append ( funcs , createFn )
333
+ return true , nil
349
334
}
335
+ funcs = append (funcs , createFn )
350
336
351
337
for _ , f := range funcs {
352
338
if err := wait .ExponentialBackoff (wait.Backoff {
@@ -410,9 +396,9 @@ func (r *SecretProviderClassPodStatusReconciler) processIfBelongsToNode(objMeta
410
396
return true
411
397
}
412
398
413
- // createK8sSecret creates K8s secret with data from mounted files
399
+ // createOrUpdateK8sSecret creates K8s secret with data from mounted files
414
400
// If a secret with the same name already exists in the namespace of the pod, the error is nil.
415
- func (r * SecretProviderClassPodStatusReconciler ) createK8sSecret (ctx context.Context , name , namespace string , datamap map [string ][]byte , labelsmap map [string ]string , annotationsmap map [string ]string , secretType corev1.SecretType ) error {
401
+ func (r * SecretProviderClassPodStatusReconciler ) createOrUpdateK8sSecret (ctx context.Context , name , namespace string , datamap map [string ][]byte , labelsmap map [string ]string , annotationsmap map [string ]string , secretType corev1.SecretType ) error {
416
402
secret := & corev1.Secret {
417
403
ObjectMeta : metav1.ObjectMeta {
418
404
Namespace : namespace ,
@@ -430,6 +416,13 @@ func (r *SecretProviderClassPodStatusReconciler) createK8sSecret(ctx context.Con
430
416
return nil
431
417
}
432
418
if apierrors .IsAlreadyExists (err ) {
419
+ klog .InfoS ("Kubernetes secret is already created" , "secret" , klog.ObjectRef {Namespace : namespace , Name : name })
420
+ err := r .writer .Update (ctx , secret )
421
+ if err != nil {
422
+ klog .Errorf ("Unable to update kubernetes secret" , "secret" , klog.ObjectRef {Namespace : namespace , Name : name })
423
+ return err
424
+ }
425
+ klog .InfoS ("successfully updated Kubernetes secret" , "secret" , klog.ObjectRef {Namespace : namespace , Name : name })
433
426
return nil
434
427
}
435
428
return err
@@ -477,23 +470,6 @@ func (r *SecretProviderClassPodStatusReconciler) patchSecretWithOwnerRef(ctx con
477
470
return nil
478
471
}
479
472
480
- // secretExists checks if the secret with name and namespace already exists
481
- func (r * SecretProviderClassPodStatusReconciler ) secretExists (ctx context.Context , name , namespace string ) (bool , error ) {
482
- o := & corev1.Secret {}
483
- secretKey := types.NamespacedName {
484
- Namespace : namespace ,
485
- Name : name ,
486
- }
487
- err := r .Client .Get (ctx , secretKey , o )
488
- if err == nil {
489
- return true , nil
490
- }
491
- if apierrors .IsNotFound (err ) {
492
- return false , nil
493
- }
494
- return false , err
495
- }
496
-
497
473
// generateEvent generates an event
498
474
func (r * SecretProviderClassPodStatusReconciler ) generateEvent (obj apiruntime.Object , eventType , reason , message string ) {
499
475
if obj != nil {
0 commit comments