From 80516dc010aeeefb13098c4464c8de8be4f8a7ca Mon Sep 17 00:00:00 2001 From: Robert Rose Date: Mon, 17 Mar 2025 21:02:17 +0100 Subject: [PATCH] Remove resources created by addon before deleting addon (#11975) Remove the AddOn last, after any resources it created in the cluster have been deleted and the AddOn file is removed. Signed-off-by: Robert Rose (cherry picked from commit 5e1845b7c11f8556decee0c0ee6d2102cf65aa4b) Signed-off-by: Brad Davidson --- pkg/deploy/controller.go | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/pkg/deploy/controller.go b/pkg/deploy/controller.go index 82d9b1870d..b99da99306 100644 --- a/pkg/deploy/controller.go +++ b/pkg/deploy/controller.go @@ -303,19 +303,23 @@ func (w *watcher) delete(path string) error { return err } - // ensure that the addon is completely removed before deleting the objectSet, - // so return when err == nil, otherwise pods may get stuck terminating - w.recorder.Eventf(&addon, corev1.EventTypeNormal, "DeletingManifest", "Deleting manifest at %q", path) - if err := w.addons.Delete(addon.Namespace, addon.Name, &metav1.DeleteOptions{}); err == nil || !apierrors.IsNotFound(err) { - return err - } - - // apply an empty set with owner & gvk data to delete + // Apply an empty set with owner & gvk data to delete if err := w.apply.WithOwner(&addon).WithGVK(addonGVKs...).ApplyObjects(); err != nil { return err } - return os.Remove(path) + // Remove the addon file + if err := os.Remove(path); err != nil { + return err + } + + // Delete the addon + w.recorder.Eventf(&addon, corev1.EventTypeNormal, "DeletingManifest", "Deleting manifest at %q", path) + if err := w.addons.Delete(addon.Namespace, addon.Name, &metav1.DeleteOptions{}); err != nil && !apierrors.IsNotFound(err) { + return err + } + + return nil } // getOrCreateAddon attempts to get an Addon by name from the addon namespace, and creates a new one