@@ -34,7 +34,7 @@ const (
3434)
3535
3636// RemovePodFinalizers removes the given finalizers from the given pod.
37- func RemovePodFinalizers (log zerolog.Logger , kubecli kubernetes.Interface , p * v1.Pod , finalizers []string ) error {
37+ func RemovePodFinalizers (log zerolog.Logger , kubecli kubernetes.Interface , p * v1.Pod , finalizers []string , ignoreNotFound bool ) error {
3838 pods := kubecli .CoreV1 ().Pods (p .GetNamespace ())
3939 getFunc := func () (metav1.Object , error ) {
4040 result , err := pods .Get (p .GetName (), metav1.GetOptions {})
@@ -52,14 +52,14 @@ func RemovePodFinalizers(log zerolog.Logger, kubecli kubernetes.Interface, p *v1
5252 * p = * result
5353 return nil
5454 }
55- if err := RemoveFinalizers (log , finalizers , getFunc , updateFunc ); err != nil {
55+ if err := RemoveFinalizers (log , finalizers , getFunc , updateFunc , ignoreNotFound ); err != nil {
5656 return maskAny (err )
5757 }
5858 return nil
5959}
6060
6161// RemovePVCFinalizers removes the given finalizers from the given PVC.
62- func RemovePVCFinalizers (log zerolog.Logger , kubecli kubernetes.Interface , p * v1.PersistentVolumeClaim , finalizers []string ) error {
62+ func RemovePVCFinalizers (log zerolog.Logger , kubecli kubernetes.Interface , p * v1.PersistentVolumeClaim , finalizers []string , ignoreNotFound bool ) error {
6363 pvcs := kubecli .CoreV1 ().PersistentVolumeClaims (p .GetNamespace ())
6464 getFunc := func () (metav1.Object , error ) {
6565 result , err := pvcs .Get (p .GetName (), metav1.GetOptions {})
@@ -77,7 +77,7 @@ func RemovePVCFinalizers(log zerolog.Logger, kubecli kubernetes.Interface, p *v1
7777 * p = * result
7878 return nil
7979 }
80- if err := RemoveFinalizers (log , finalizers , getFunc , updateFunc ); err != nil {
80+ if err := RemoveFinalizers (log , finalizers , getFunc , updateFunc , ignoreNotFound ); err != nil {
8181 return maskAny (err )
8282 }
8383 return nil
@@ -87,12 +87,16 @@ func RemovePVCFinalizers(log zerolog.Logger, kubecli kubernetes.Interface, p *v1
8787// The functions tries to get the object using the provided get function,
8888// then remove the given finalizers and update the update using the given update function.
8989// In case of an update conflict, the functions tries again.
90- func RemoveFinalizers (log zerolog.Logger , finalizers []string , getFunc func () (metav1.Object , error ), updateFunc func (metav1.Object ) error ) error {
90+ func RemoveFinalizers (log zerolog.Logger , finalizers []string , getFunc func () (metav1.Object , error ), updateFunc func (metav1.Object ) error , ignoreNotFound bool ) error {
9191 attempts := 0
9292 for {
9393 attempts ++
9494 obj , err := getFunc ()
9595 if err != nil {
96+ if IsNotFound (err ) && ignoreNotFound {
97+ // Object no longer found and we're allowed to ignore that.
98+ return nil
99+ }
96100 log .Warn ().Err (err ).Msg ("Failed to get resource" )
97101 return maskAny (err )
98102 }
@@ -125,6 +129,9 @@ func RemoveFinalizers(log zerolog.Logger, finalizers []string, getFunc func() (m
125129 // Try again
126130 continue
127131 }
132+ } else if IsNotFound (err ) && ignoreNotFound {
133+ // Object no longer found and we're allowed to ignore that.
134+ return nil
128135 } else if err != nil {
129136 log .Warn ().Err (err ).Msg ("Failed to update resource with fewer finalizers" )
130137 return maskAny (err )
0 commit comments