pkg/cni/cleanup.go (48 lines of code) (raw):

package cni import ( "context" overlayv1alpha1 "github.com/Azure/azure-container-networking/crd/overlayextensionconfig/api/v1alpha1" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/klog/v2" "sigs.k8s.io/controller-runtime/pkg/client" ) func CleanupOverlayExtensionConfigs(k8sClient client.Client, namespace string, addonMode bool) error { // Define a label selector for filtering the resources to delete. managedByValue := ResourceManagedByHelmValue if addonMode { managedByValue = ResourceManagedByAddonValue } // Perform cleanup of OverlayExtensionConfig resources. if err := cleanupOverlayExtensionConfigs(k8sClient, namespace, managedByValue); err != nil { klog.Errorf("Error cleaning up OverlayExtensionConfig resources: %v", err) return err } klog.Infof("Cleanup completed successfully.") return nil } // cleanupOverlayExtensionConfigs lists and deletes OverlayExtensionConfig resources in the given namespace // that match the provided label selector. If the CRD is not present, it logs a warning and returns nil. func cleanupOverlayExtensionConfigs(c client.Client, namespace string, label string) error { ctx := context.Background() // Create an empty list to hold OverlayExtensionConfig resources. var overlayList overlayv1alpha1.OverlayExtensionConfigList // List the resources with the provided namespace and label selector. if err := c.List(ctx, &overlayList, client.InNamespace(namespace), client.MatchingLabels(map[string]string{ResourceManagedByLabel: label})); err != nil { // If the API server does not recognize the CRD, skip cleanup. if meta.IsNoMatchError(err) { klog.Warning("CRD OverlayExtensionConfig not found in the cluster. Skipping cleanup.") return nil } return err } // If no resources are found, log and exit. if len(overlayList.Items) == 0 { klog.Infof("No OverlayExtensionConfig resources found in namespace %q with labels %q", namespace, label) return nil } // Iterate through and delete each OverlayExtensionConfig resource. var deletionError error for _, item := range overlayList.Items { klog.Infof("Deleting OverlayExtensionConfig: %q", item.Name) if err := c.Delete(ctx, &item, &client.DeleteOptions{}); err != nil { klog.Errorf("Error deleting resource %q: %v", item.Name, err) deletionError = err } else { klog.Infof("Successfully deleted resource %q", item.Name) } } return deletionError }