@@ -14,6 +14,7 @@ import (
1414 "github.com/sdslabs/katana/lib/utils"
1515 appsv1 "k8s.io/api/apps/v1"
1616 v1 "k8s.io/api/core/v1"
17+ errors "k8s.io/apimachinery/pkg/api/errors"
1718 "k8s.io/apimachinery/pkg/api/meta"
1819 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1920 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -97,7 +98,6 @@ func ApplyManifest(kubeconfig *rest.Config, kubeclientset *kubernetes.Clientset,
9798 watcher , err := dri .Watch (context .Background (), metav1.ListOptions {
9899 FieldSelector : fmt .Sprintf ("metadata.name=%s" , unstructuredObj .GetName ()),
99100 })
100-
101101 if err != nil {
102102 return err
103103 }
@@ -129,27 +129,28 @@ func ApplyManifest(kubeconfig *rest.Config, kubeclientset *kubernetes.Clientset,
129129 // Resource deleted and we can re-create it
130130 _ , err = dri .Create (context .Background (), unstructuredObj , metav1.CreateOptions {})
131131 if err != nil {
132- log .Printf ("Failed to re-create resource %s: %v" , unstructuredObj .GetName (), err )
132+ log .Printf ("[Deletion done] Failed to re-create resource %s: %v" , unstructuredObj .GetName (), err )
133133 return err
134134 }
135135 case <- time .After (timeout ):
136- // Timeout reached
137- _ , err = dri .Create (context .Background (), unstructuredObj , metav1.CreateOptions {})
138- if err != nil {
139- log .Printf ("[Timedout] Failed to re-create resource %s: %v" , unstructuredObj .GetName (), err )
140- return err
136+ // Timeout reached, check if resource still exists.
137+ existingObj , getErr := dri .Get (context .Background (), unstructuredObj .GetName (), metav1.GetOptions {})
138+ if getErr == nil {
139+ // Resource still exists, so deletion timed out.
140+ return fmt .Errorf ("[Timedout] waiting for deletion of resource %s" , existingObj .GetName ())
141+ }
142+ // If error confirms resource is not found, proceed to re-create.
143+ if errors .IsNotFound (getErr ){
144+ _ , err = dri .Create (context .Background (), unstructuredObj , metav1.CreateOptions {})
145+ if err != nil {
146+ log .Printf ("Failed to re-create resource %s: %v" , unstructuredObj .GetName (), err )
147+ return err
148+ }
149+ }else {
150+ // An unexpected error occurred during GET call
151+ return getErr
141152 }
142153 }
143-
144- // for event := range watcher.ResultChan() {
145- // if event.Type == watch.Deleted {
146- // _, err = dri.Create(context.Background(), unstructuredObj, metav1.CreateOptions{})
147- // if err != nil {
148- // return err
149- // }
150- // break
151- // }
152- // }
153154 }
154155 }
155156 }
0 commit comments