@@ -22,10 +22,11 @@ import (
2222)
2323
2424const (
25- StackitProviderName = "stackit"
26- StackitMachineLabel = "mcm.gardener.cloud/machine"
27- StackitMachineClassLabel = "mcm.gardener.cloud/machineclass"
28- StackitRoleLabel = "mcm.gardener.cloud/role"
25+ StackitProviderName = "stackit"
26+ StackitMachineLabel = "mcm.gardener.cloud/machine"
27+ StackitMachineClassLabel = "mcm.gardener.cloud/machineclass"
28+ StackitRoleLabel = "mcm.gardener.cloud/role"
29+ portDeletionAnnotationPrefix = "stackit.cloud/cleanup-port-on-deletion-"
2930)
3031
3132// CreateMachine handles a machine creation request by creating a STACKIT server
@@ -357,6 +358,27 @@ func (p *Provider) DeleteMachine(ctx context.Context, req *driver.DeleteMachineR
357358 return nil , status .Error (codes .Internal , fmt .Sprintf ("failed to delete server: %v" , err ))
358359 }
359360
361+ for annotation , value := range req .Machine .Annotations {
362+ if strings .HasPrefix (annotation , portDeletionAnnotationPrefix ) {
363+ splitted := strings .Split (value , "/" )
364+ if len (splitted ) != 2 {
365+ continue
366+ }
367+ klog .V (2 ).Infof ("Found migrated nic %s for machine %q, triggering deletion" , splitted [1 ], req .Machine .Name )
368+ err = p .client .DeleteNic (ctx , projectID , providerSpec .Region , splitted [0 ], splitted [1 ])
369+ if err != nil {
370+ // Check if server was not found (404) - this is OK for idempotency
371+ if errors .Is (err , ErrNicNotFound ) {
372+ klog .V (2 ).Infof ("Nic %q already deleted for machine %q (idempotent)" , serverID [1 ], req .Machine .Name )
373+ return & driver.DeleteMachineResponse {}, nil
374+ }
375+ // All other errors are internal errors
376+ klog .Errorf ("Failed to delete nic for machine %q: %v" , req .Machine .Name , err )
377+ return nil , status .Error (codes .Internal , fmt .Sprintf ("failed to delete nic: %v" , err ))
378+ }
379+ }
380+ }
381+
360382 klog .V (2 ).Infof ("Successfully deleted server %q for machine %q" , serverID , req .Machine .Name )
361383
362384 return & driver.DeleteMachineResponse {}, nil
0 commit comments