@@ -19,6 +19,9 @@ package main
1919import (
2020 "context"
2121 "fmt"
22+ "os"
23+ "os/signal"
24+ "syscall"
2225 "time"
2326
2427 v1 "k8s.io/api/core/v1"
@@ -94,6 +97,10 @@ func manageResourceSlices(ctx context.Context, clientset kubernetes.Interface, o
9497 return fmt .Errorf ("error starting resource slice controller: %w" , err )
9598 }
9699
100+ // Setup signal catching
101+ sigs := make (chan os.Signal , 1 )
102+ signal .Notify (sigs , syscall .SIGTERM , syscall .SIGINT )
103+
97104 go func () {
98105 for {
99106 select {
@@ -109,7 +116,12 @@ func manageResourceSlices(ctx context.Context, clientset kubernetes.Interface, o
109116 delete (newDriverResources .Pools , removedDomain )
110117 controller .Update (& newDriverResources )
111118 driverResources = newDriverResources
112- case <- ctx .Done ():
119+ case <- sigs :
120+ controller .Stop ()
121+ err = cleanupImexChannels (ctx , clientset )
122+ if err != nil {
123+ klog .Errorf ("error cleaning up resource slices: %v" , err )
124+ }
113125 return
114126 }
115127 }
@@ -259,3 +271,25 @@ func generateImexChannelPool(imexDomain string, numChannels int) resourceslice.P
259271
260272 return pool
261273}
274+
275+ // cleanupImexChannels removes all resource slices created by the IMEX manager.
276+ func cleanupImexChannels (ctx context.Context , clientset kubernetes.Interface ) error {
277+ // Delete all resource slices created by the IMEX manager
278+ ops := metav1.ListOptions {
279+ FieldSelector : fmt .Sprintf ("%s=%s" , resourceapi .ResourceSliceSelectorDriver , DriverName ),
280+ }
281+ l , err := clientset .ResourceV1alpha3 ().ResourceSlices ().List (ctx , ops )
282+ if err != nil {
283+ return fmt .Errorf ("error listing resource slices: %w" , err )
284+ }
285+
286+ for _ , rs := range l .Items {
287+ klog .Info ("Deleting resource slice: " , rs .Name )
288+ err := clientset .ResourceV1alpha3 ().ResourceSlices ().Delete (ctx , rs .Name , metav1.DeleteOptions {})
289+ if err != nil {
290+ return fmt .Errorf ("error deleting resource slice %s: %w" , rs .Name , err )
291+ }
292+ }
293+
294+ return nil
295+ }
0 commit comments