@@ -295,58 +295,44 @@ func (r *SecretProviderClassPodStatusReconciler) Reconcile(ctx context.Context,
295295 errs = append (errs , fmt .Errorf ("failed to validate secret object in spc %s/%s, err: %w" , spc .Namespace , spc .Name , err ))
296296 continue
297297 }
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- }
309298
310299 var funcs []func () (bool , error )
300+ secretType := secretutil .GetSecretType (strings .TrimSpace (secretObj .Type ))
311301
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+ }
322309
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 )
345330 }
346- return true , nil
331+ return false , nil
347332 }
348- funcs = append ( funcs , createFn )
333+ return true , nil
349334 }
335+ funcs = append (funcs , createFn )
350336
351337 for _ , f := range funcs {
352338 if err := wait .ExponentialBackoff (wait.Backoff {
@@ -410,9 +396,9 @@ func (r *SecretProviderClassPodStatusReconciler) processIfBelongsToNode(objMeta
410396 return true
411397}
412398
413- // createK8sSecret creates K8s secret with data from mounted files
399+ // createOrUpdateK8sSecret creates K8s secret with data from mounted files
414400// 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 {
416402 secret := & corev1.Secret {
417403 ObjectMeta : metav1.ObjectMeta {
418404 Namespace : namespace ,
@@ -430,6 +416,13 @@ func (r *SecretProviderClassPodStatusReconciler) createK8sSecret(ctx context.Con
430416 return nil
431417 }
432418 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 })
433426 return nil
434427 }
435428 return err
@@ -477,23 +470,6 @@ func (r *SecretProviderClassPodStatusReconciler) patchSecretWithOwnerRef(ctx con
477470 return nil
478471}
479472
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-
497473// generateEvent generates an event
498474func (r * SecretProviderClassPodStatusReconciler ) generateEvent (obj apiruntime.Object , eventType , reason , message string ) {
499475 if obj != nil {
0 commit comments