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 <robert.rose@mailbox.org>
(cherry picked from commit 5e1845b7c1)
Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
This commit is contained in:
Robert Rose
2025-03-17 21:02:17 +01:00
committed by Brad Davidson
parent 2d1c4ec680
commit 1f352c8344

View File

@@ -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