@@ -186,57 +186,46 @@ func (r *Reconciler) parseManifestFiles(manifestFiles []string, logger logr.Logg
186186 var parsedResources []* unstructured.Unstructured
187187
188188 for _ , manifestFile := range manifestFiles {
189- resources , err := r .parseManifestFile (manifestFile , logger , operation )
190- if err != nil {
191- return nil , err
192- }
193- parsedResources = append (parsedResources , resources ... )
194- }
189+ logger .Info ("Processing manifest file" , "file" , manifestFile , "operation" , operation )
195190
196- logger .Info ("Total resources parsed" , "count" , len (parsedResources ), "operation" , operation )
191+ fileContent , readErr := os .ReadFile (manifestFile )
192+ if readErr != nil {
193+ logger .Error (readErr , "Failed to read manifest file" , "file" , manifestFile , "operation" , operation )
197194
198- return parsedResources , nil
199- }
200-
201- func (r * Reconciler ) parseManifestFile (manifestFile string , logger logr.Logger , operation string ) ([]* unstructured.Unstructured , error ) {
202- logger .Info ("Processing manifest file" , "file" , manifestFile , "operation" , operation )
203-
204- fileContent , readErr := os .ReadFile (manifestFile )
205- if readErr != nil {
206- logger .Error (readErr , "Failed to read manifest file" , "file" , manifestFile , "operation" , operation )
195+ return nil , readErr
196+ }
207197
208- return nil , readErr
209- }
198+ yamlDecoder := k8syaml .NewYAMLOrJSONDecoder (bytes .NewReader (fileContent ), 100 )
210199
211- var parsedResources []* unstructured.Unstructured
212- yamlDecoder := k8syaml .NewYAMLOrJSONDecoder (bytes .NewReader (fileContent ), 100 )
200+ for {
201+ var rawObj runtime.RawExtension
202+ if err := yamlDecoder .Decode (& rawObj ); err != nil {
203+ if err .Error () == "EOF" {
204+ break
205+ }
206+ logger .Error (err , "Failed to decode YAML from manifest file" , "file" , manifestFile , "operation" , operation )
213207
214- for {
215- var rawObj runtime.RawExtension
216- if err := yamlDecoder .Decode (& rawObj ); err != nil {
217- if err .Error () == "EOF" {
218- break
208+ return nil , err
219209 }
220- logger .Error (err , "Failed to decode YAML from manifest file" , "file" , manifestFile , "operation" , operation )
221210
222- return nil , err
223- }
211+ if rawObj .Raw == nil {
212+ continue
213+ }
224214
225- if rawObj . Raw == nil {
226- continue
227- }
215+ u := & unstructured. Unstructured {}
216+ if _ , _ , err := unstructured . UnstructuredJSONScheme . Decode ( rawObj . Raw , nil , u ); err != nil {
217+ logger . Error ( err , "Failed to decode RawExtension to Unstructured" , "file" , manifestFile , "operation" , operation )
228218
229- u := & unstructured.Unstructured {}
230- if _ , _ , err := unstructured .UnstructuredJSONScheme .Decode (rawObj .Raw , nil , u ); err != nil {
231- logger .Error (err , "Failed to decode RawExtension to Unstructured" , "file" , manifestFile , "operation" , operation )
219+ return nil , err
220+ }
232221
233- return nil , err
222+ parsedResources = append (parsedResources , u )
223+ logger .Info ("Parsed resource" , "GVK" , u .GroupVersionKind ().String (), "Name" , u .GetName (), "Namespace" , u .GetNamespace (), "operation" , operation )
234224 }
235-
236- parsedResources = append (parsedResources , u )
237- logger .Info ("Parsed resource" , "GVK" , u .GroupVersionKind ().String (), "Name" , u .GetName (), "Namespace" , u .GetNamespace (), "operation" , operation )
238225 }
239226
227+ logger .Info ("Total resources parsed" , "count" , len (parsedResources ), "operation" , operation )
228+
240229 return parsedResources , nil
241230}
242231
@@ -258,6 +247,39 @@ func (r *Reconciler) deleteResourcesFromClusters(ctx context.Context, cdk8sAppPr
258247 return nil
259248}
260249
250+ func (r * Reconciler ) deleteResourcesFromSingleCluster (ctx context.Context , cdk8sAppProxy * addonsv1alpha1.Cdk8sAppProxy , cluster clusterv1.Cluster , parsedResources []* unstructured.Unstructured , logger logr.Logger ) error {
251+ clusterLogger := logger .WithValues ("targetCluster" , cluster .Name )
252+ clusterLogger .Info ("Deleting resources from cluster" )
253+
254+ dynamicClient , err := r .getDynamicClientForCluster (ctx , cdk8sAppProxy .Namespace , cluster .Name )
255+ if err != nil {
256+ clusterLogger .Error (err , "Failed to get dynamic client for cluster during deletion, skipping this cluster" )
257+
258+ return err
259+ }
260+
261+ clusterLogger .Info ("Successfully created dynamic client for cluster deletion" )
262+
263+ for _ , resource := range parsedResources {
264+ gvr := resource .GroupVersionKind ().GroupVersion ().WithResource (getPluralFromKind (resource .GetKind ()))
265+ clusterLogger .Info ("Deleting resource from cluster" , "GVK" , resource .GroupVersionKind ().String (), "Name" , resource .GetName (), "Namespace" , resource .GetNamespace ())
266+
267+ err := dynamicClient .Resource (gvr ).Namespace (resource .GetNamespace ()).Delete (ctx , resource .GetName (), metav1.DeleteOptions {})
268+
269+ switch {
270+ case err != nil && ! apierrors .IsNotFound (err ):
271+ clusterLogger .Error (err , "Failed to delete resource from cluster" , "resourceName" , resource .GetName ())
272+ // Log but continue with other resources
273+ case apierrors .IsNotFound (err ):
274+ clusterLogger .Info ("Resource already deleted from cluster" , "resourceName" , resource .GetName ())
275+ case err == nil :
276+ clusterLogger .Info ("Successfully deleted resource from cluster" , "resourceName" , resource .GetName ())
277+ }
278+ }
279+
280+ return nil
281+ }
282+
261283func (r * Reconciler ) getTargetClustersForDeletion (ctx context.Context , cdk8sAppProxy * addonsv1alpha1.Cdk8sAppProxy , logger logr.Logger ) (* clusterv1.ClusterList , error ) {
262284 clusterList := & clusterv1.ClusterList {}
263285 selector , err := metav1 .LabelSelectorAsSelector (& cdk8sAppProxy .Spec .ClusterSelector )
@@ -283,83 +305,77 @@ func (r *Reconciler) getTargetClustersForDeletion(ctx context.Context, cdk8sAppP
283305 return clusterList , nil
284306}
285307
286- func (r * Reconciler ) deleteResourcesFromSingleCluster (ctx context.Context , cdk8sAppProxy * addonsv1alpha1.Cdk8sAppProxy , cluster clusterv1.Cluster , parsedResources []* unstructured.Unstructured , logger logr.Logger ) error {
287- clusterLogger := logger .WithValues ("targetCluster" , cluster .Name )
288- clusterLogger .Info ("Deleting resources from cluster" )
289-
290- dynamicClient , err := r .getDynamicClientForCluster (ctx , cdk8sAppProxy .Namespace , cluster .Name )
291- if err != nil {
292- clusterLogger .Error (err , "Failed to get dynamic client for cluster during deletion, skipping this cluster" )
308+ // func (r *Reconciler) deleteResourcesFromSingleCluster(ctx context.Context, cdk8sAppProxy *addonsv1alpha1.Cdk8sAppProxy, cluster clusterv1.Cluster, parsedResources []*unstructured.Unstructured, logger logr.Logger) error {
309+ // clusterLogger := logger.WithValues("targetCluster", cluster.Name)
310+ // clusterLogger.Info("Deleting resources from cluster")
293311
294- return err
295- }
312+ // dynamicClient, err := r.getDynamicClientForCluster(ctx, cdk8sAppProxy.Namespace, cluster.Name)
313+ // if err != nil {
314+ // clusterLogger.Error(err, "Failed to get dynamic client for cluster during deletion, skipping this cluster")
296315
297- clusterLogger .Info ("Successfully created dynamic client for cluster deletion" )
316+ // return err
317+ // }
298318
299- for _ , resource := range parsedResources {
300- if err := r .deleteResourceFromCluster (ctx , dynamicClient , resource , clusterLogger ); err != nil {
301- // Log but continue with other resources
302- clusterLogger .Error (err , "Failed to delete resource from cluster" , "resourceName" , resource .GetName ())
303- }
304- }
319+ // clusterLogger.Info("Successfully created dynamic client for cluster deletion")
305320
306- return nil
307- }
321+ // for _, resource := range parsedResources {
322+ // if err := r.deleteResourceFromCluster(ctx, dynamicClient, resource, clusterLogger); err != nil {
323+ // // Log but continue with other resources
324+ // clusterLogger.Error(err, "Failed to delete resource from cluster", "resourceName", resource.GetName())
325+ // }
326+ // }
308327
309- func (r * Reconciler ) deleteResourceFromCluster (ctx context.Context , dynamicClient dynamic.Interface , resource * unstructured.Unstructured , logger logr.Logger ) error {
310- gvr := resource .GroupVersionKind ().GroupVersion ().WithResource (getPluralFromKind (resource .GetKind ()))
311- logger .Info ("Deleting resource from cluster" , "GVK" , resource .GroupVersionKind ().String (), "Name" , resource .GetName (), "Namespace" , resource .GetNamespace ())
328+ // return nil
329+ // }
312330
313- err := dynamicClient .Resource (gvr ).Namespace (resource .GetNamespace ()).Delete (ctx , resource .GetName (), metav1.DeleteOptions {})
331+ // func (r *Reconciler) deleteResourceFromCluster(ctx context.Context, dynamicClient dynamic.Interface, resource *unstructured.Unstructured, logger logr.Logger) error {
332+ // gvr := resource.GroupVersionKind().GroupVersion().WithResource(getPluralFromKind(resource.GetKind()))
333+ // logger.Info("Deleting resource from cluster", "GVK", resource.GroupVersionKind().String(), "Name", resource.GetName(), "Namespace", resource.GetNamespace())
314334
315- switch {
316- case err != nil && ! apierrors .IsNotFound (err ):
317- logger .Error (err , "Failed to delete resource from cluster" , "resourceName" , resource .GetName ())
335+ // err := dynamicClient.Resource(gvr).Namespace(resource.GetNamespace()).Delete(ctx, resource.GetName(), metav1.DeleteOptions{})
318336
319- return err
320- case apierrors .IsNotFound (err ):
321- logger .Info ("Resource already deleted from cluster" , "resourceName" , resource .GetName ())
322- case err == nil :
323- logger .Info ("Successfully deleted resource from cluster" , "resourceName" , resource .GetName ())
324- }
337+ // switch {
338+ // case err != nil && !apierrors.IsNotFound(err):
339+ // logger.Error(err, "Failed to delete resource from cluster", "resourceName", resource.GetName())
325340
326- return nil
327- }
341+ // return err
342+ // case apierrors.IsNotFound(err):
343+ // logger.Info("Resource already deleted from cluster", "resourceName", resource.GetName())
344+ // case err == nil:
345+ // logger.Info("Successfully deleted resource from cluster", "resourceName", resource.GetName())
346+ // }
328347
329- func (r * Reconciler ) finalizeDeletion (ctx context.Context , cdk8sAppProxy * addonsv1alpha1.Cdk8sAppProxy , proxyNamespacedName types.NamespacedName , logger logr.Logger ) (ctrl.Result , error ) {
330- // Cancel any active watches for this Cdk8sAppProxy
331- r .cancelActiveWatches (proxyNamespacedName , logger )
348+ // return nil
349+ // }
332350
333- // Remove finalizer
334- return r .removeFinalizer (ctx , cdk8sAppProxy , logger )
335- }
351+ func (r * Reconciler ) finalizeDeletion (ctx context.Context , cdk8sAppProxy * addonsv1alpha1.Cdk8sAppProxy , proxyNamespacedName types.NamespacedName , logger logr.Logger ) error {
352+ logger .Info ("Starting finalization process" )
336353
337- func ( r * Reconciler ) cancelActiveWatches ( proxyNamespacedName types. NamespacedName , logger logr. Logger ) {
354+ // Cancel any active watches for this Cdk8sAppProxy
338355 if watchesForProxy , ok := r .ActiveWatches [proxyNamespacedName ]; ok {
339356 logger .Info ("Cancelling active watches for Cdk8sAppProxy before deletion" , "count" , len (watchesForProxy ))
340357 for watchKey , cancelFunc := range watchesForProxy {
341358 logger .Info ("Cancelling watch" , "watchKey" , watchKey )
342359 cancelFunc () // Stop the goroutine and its associated Kubernetes watch
343360 }
344- // After all, watches for this proxy are canceled, remove its entry from the main map
361+ // After all watches for this proxy are canceled, remove its entry from the main map
345362 delete (r .ActiveWatches , proxyNamespacedName )
346363 logger .Info ("Removed Cdk8sAppProxy entry from ActiveWatches map" )
347364 } else {
348- logger .Info ("No active watches found for this Cdk8sAppProxy to cancel. " )
365+ logger .Info ("No active watches found for this Cdk8sAppProxy to cancel" )
349366 }
350- }
351367
352- func ( r * Reconciler ) removeFinalizer ( ctx context. Context , cdk8sAppProxy * addonsv1alpha1. Cdk8sAppProxy , logger logr. Logger ) (ctrl. Result , error ) {
368+ // Remove finalizer
353369 logger .Info ("Finished deletion logic, removing finalizer" )
354370 controllerutil .RemoveFinalizer (cdk8sAppProxy , Finalizer )
355371 if err := r .Update (ctx , cdk8sAppProxy ); err != nil {
356372 logger .Error (err , "Failed to remove finalizer" )
357373
358- return ctrl. Result {}, err
374+ return err
359375 }
360376 logger .Info ("Finalizer removed successfully" )
361377
362- return ctrl. Result {}, nil
378+ return nil
363379}
364380
365381func (r * Reconciler ) getDynamicClientForCluster (ctx context.Context , secretNamespace , clusterName string ) (dynamic.Interface , error ) {
0 commit comments