@@ -502,17 +502,45 @@ func (g Struct) DeleteTCPRoute(w http.ResponseWriter, r *http.Request) {
502502 tenant := r .Context ().Value (ctxutil .ContextKey ("tenant" )).(* dbmodel.Tenants )
503503 name := chi .URLParam (r , "name" )
504504
505+ // Split name by "-" to get alias and port
506+ parts := strings .Split (name , "-" )
507+ if len (parts ) != 2 {
508+ httputil .ReturnBcodeError (r , w , bcode .ErrRouteDelete )
509+ return
510+ }
511+ serviceAlias := parts [0 ]
512+ port := parts [1 ]
513+
514+ // Create label selector
515+ labelSelector := fmt .Sprintf ("outer=true,port=%s,service_alias=%s" , port , serviceAlias )
516+
505517 k := k8s .Default ().Clientset .CoreV1 ()
506- err := k .Services (tenant .Namespace ).Delete (r .Context (), name , v1.DeleteOptions {})
518+ // List services with the specified labels
519+ services , err := k .Services (tenant .Namespace ).List (r .Context (), v1.ListOptions {
520+ LabelSelector : labelSelector ,
521+ })
507522 if err != nil {
508- if errors .IsNotFound (err ) {
509- httputil .ReturnSuccess (r , w , name )
510- } else {
511- logrus .Errorf ("delete route error %s" , err .Error ())
523+ logrus .Errorf ("list services error %s" , err .Error ())
524+ httputil .ReturnBcodeError (r , w , bcode .ErrRouteDelete )
525+ return
526+ }
527+
528+ if len (services .Items ) == 0 {
529+ // No services found with these labels
530+ httputil .ReturnSuccess (r , w , name )
531+ return
532+ }
533+
534+ // Delete all matching services
535+ for _ , svc := range services .Items {
536+ err := k .Services (tenant .Namespace ).Delete (r .Context (), svc .Name , v1.DeleteOptions {})
537+ if err != nil && ! errors .IsNotFound (err ) {
538+ logrus .Errorf ("delete service %s error %s" , svc .Name , err .Error ())
512539 httputil .ReturnBcodeError (r , w , bcode .ErrRouteDelete )
540+ return
513541 }
514- return
515542 }
543+
516544 httputil .ReturnSuccess (r , w , name )
517545}
518546
0 commit comments