@@ -16,6 +16,7 @@ import (
1616 "google.golang.org/grpc/status"
1717
1818 bridgev1 "github.com/vercel/bridge/api/go/bridge/v1"
19+ "github.com/vercel/bridge/pkg/except"
1920 "github.com/vercel/bridge/pkg/identity"
2021 "github.com/vercel/bridge/pkg/k8s/kube"
2122 "github.com/vercel/bridge/pkg/k8s/meta"
@@ -231,22 +232,24 @@ func (s *administratorServer) ListBridges(ctx context.Context, req *bridgev1.Lis
231232 return nil , status .Error (codes .InvalidArgument , "device_id is required" )
232233 }
233234
234- namespaces , err := namespace .ListBridgeNamespaces (ctx , s .client , req .DeviceId )
235+ nsName := identity .NamespaceForDevice (req .DeviceId )
236+ deploys , err := s .client .AppsV1 ().Deployments (nsName ).List (ctx , metav1.ListOptions {
237+ LabelSelector : meta .ProxySelector ,
238+ })
235239 if err != nil {
236- return nil , status .Errorf (codes .Internal , "failed to list bridge namespaces : %v" , err )
240+ return nil , status .Errorf (codes .Internal , "failed to list bridge deployments : %v" , err )
237241 }
238242
239243 var bridges []* bridgev1.BridgeInfo
240- for _ , ns := range namespaces {
241- info := & bridgev1.BridgeInfo {
242- DeviceId : ns .Labels [meta .LabelDeviceID ],
243- SourceDeployment : ns .Labels [meta .LabelWorkloadSource ],
244- SourceNamespace : ns .Labels [meta .LabelWorkloadSourceNamespace ],
245- Namespace : ns .Name ,
246- CreatedAt : ns .CreationTimestamp .Format (time .RFC3339 ),
247- Status : string (ns .Status .Phase ),
248- }
249- bridges = append (bridges , info )
244+ for _ , d := range deploys .Items {
245+ bridges = append (bridges , & bridgev1.BridgeInfo {
246+ DeviceId : req .DeviceId ,
247+ SourceDeployment : d .Labels [meta .LabelWorkloadSource ],
248+ SourceNamespace : d .Labels [meta .LabelWorkloadSourceNamespace ],
249+ Namespace : nsName ,
250+ DeploymentName : d .Name ,
251+ CreatedAt : d .CreationTimestamp .Format (time .RFC3339 ),
252+ })
250253 }
251254
252255 return & bridgev1.ListBridgesResponse {
@@ -258,22 +261,17 @@ func (s *administratorServer) DeleteBridge(ctx context.Context, req *bridgev1.De
258261 if req .DeviceId == "" {
259262 return nil , status .Error (codes .InvalidArgument , "device_id is required" )
260263 }
264+ if req .Name == "" {
265+ return nil , status .Error (codes .InvalidArgument , "name is required" )
266+ }
261267
262268 nsName := identity .NamespaceForDevice (req .DeviceId )
263269
264- slog .Info ("Deleting bridge" , "device_id" , req .DeviceId , "namespace" , nsName , "source_deployment " , req .SourceDeployment )
270+ slog .Info ("Deleting bridge" , "device_id" , req .DeviceId , "namespace" , nsName , "name " , req .Name )
265271
266- if req .SourceDeployment != "" {
267- // Delete just the deployment for this source
268- err := s .client .AppsV1 ().Deployments (nsName ).Delete (ctx , resources .BridgeDeployName (req .SourceDeployment ), metav1.DeleteOptions {})
269- if err != nil {
270- return nil , status .Errorf (codes .Internal , "failed to delete deployment: %v" , err )
271- }
272- } else {
273- // Delete the entire namespace
274- if err := namespace .DeleteNamespace (ctx , s .client , nsName ); err != nil {
275- return nil , status .Errorf (codes .Internal , "failed to delete namespace: %v" , err )
276- }
272+ err := s .client .AppsV1 ().Deployments (nsName ).Delete (ctx , req .Name , metav1.DeleteOptions {})
273+ if err != nil {
274+ return nil , except .GRPCFromK8s (err , "failed to delete deployment" )
277275 }
278276
279277 return & bridgev1.DeleteBridgeResponse {}, nil
0 commit comments