Skip to content

Commit 72138fd

Browse files
committed
feat: Fixing admin methods.
1 parent 09253f5 commit 72138fd

8 files changed

Lines changed: 77 additions & 59 deletions

File tree

api/go/bridge/v1/administrator.pb.go

Lines changed: 24 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/ts/bridge/v1/administrator_pb.d.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,13 @@ export declare type BridgeInfo = Message<"bridge.v1.BridgeInfo"> & {
168168
* @generated from field: string status = 6;
169169
*/
170170
status: string;
171+
172+
/**
173+
* The name of the bridge Deployment.
174+
*
175+
* @generated from field: string deployment_name = 7 [json_name = "deployment_name"];
176+
*/
177+
deploymentName: string;
171178
};
172179

173180
/**
@@ -208,12 +215,11 @@ export declare type DeleteBridgeRequest = Message<"bridge.v1.DeleteBridgeRequest
208215
deviceId: string;
209216

210217
/**
211-
* The source deployment name to identify which bridge to delete.
212-
* If empty, deletes the entire device namespace and all bridges within it.
218+
* The name of the bridge to delete.
213219
*
214-
* @generated from field: string source_deployment = 2 [json_name = "source_deployment"];
220+
* @generated from field: string name = 2;
215221
*/
216-
sourceDeployment: string;
222+
name: string;
217223
};
218224

219225
/**

api/ts/bridge/v1/administrator_pb.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2
88
* Describes the file bridge/v1/administrator.proto.
99
*/
1010
export const file_bridge_v1_administrator = /*@__PURE__*/
11-
fileDesc("Ch1icmlkZ2UvdjEvYWRtaW5pc3RyYXRvci5wcm90bxIJYnJpZGdlLnYxIpwBChNDcmVhdGVCcmlkZ2VSZXF1ZXN0EhwKCWRldmljZV9pZBgBIAEoCVIJZGV2aWNlX2lkEiwKEXNvdXJjZV9kZXBsb3ltZW50GAIgASgJUhFzb3VyY2VfZGVwbG95bWVudBIqChBzb3VyY2VfbmFtZXNwYWNlGAMgASgJUhBzb3VyY2VfbmFtZXNwYWNlEg0KBWZvcmNlGAQgASgIIu0BChRDcmVhdGVCcmlkZ2VSZXNwb25zZRIRCgluYW1lc3BhY2UYASABKAkSGgoIcG9kX25hbWUYAiABKAlSCHBvZF9uYW1lEgwKBHBvcnQYAyABKAUSKAoPZGVwbG95bWVudF9uYW1lGAQgASgJUg9kZXBsb3ltZW50X25hbWUSPgoIZW52X3ZhcnMYBSADKAsyLC5icmlkZ2UudjEuQ3JlYXRlQnJpZGdlUmVzcG9uc2UuRW52VmFyc0VudHJ5Gi4KDEVudlZhcnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIjIKEkxpc3RCcmlkZ2VzUmVxdWVzdBIcCglkZXZpY2VfaWQYASABKAlSCWRldmljZV9pZCLHAQoKQnJpZGdlSW5mbxIcCglkZXZpY2VfaWQYASABKAlSCWRldmljZV9pZBIsChFzb3VyY2VfZGVwbG95bWVudBgCIAEoCVIRc291cmNlX2RlcGxveW1lbnQSKgoQc291cmNlX25hbWVzcGFjZRgDIAEoCVIQc291cmNlX25hbWVzcGFjZRIRCgluYW1lc3BhY2UYBCABKAkSHgoKY3JlYXRlZF9hdBgFIAEoCVIKY3JlYXRlZF9hdBIOCgZzdGF0dXMYBiABKAkiPQoTTGlzdEJyaWRnZXNSZXNwb25zZRImCgdicmlkZ2VzGAEgAygLMhUuYnJpZGdlLnYxLkJyaWRnZUluZm8iYQoTRGVsZXRlQnJpZGdlUmVxdWVzdBIcCglkZXZpY2VfaWQYASABKAlSCWRldmljZV9pZBIsChFzb3VyY2VfZGVwbG95bWVudBgCIAEoCVIRc291cmNlX2RlcGxveW1lbnQiFgoURGVsZXRlQnJpZGdlUmVzcG9uc2UyhgIKFEFkbWluaXN0cmF0b3JTZXJ2aWNlEk8KDENyZWF0ZUJyaWRnZRIeLmJyaWRnZS52MS5DcmVhdGVCcmlkZ2VSZXF1ZXN0Gh8uYnJpZGdlLnYxLkNyZWF0ZUJyaWRnZVJlc3BvbnNlEkwKC0xpc3RCcmlkZ2VzEh0uYnJpZGdlLnYxLkxpc3RCcmlkZ2VzUmVxdWVzdBoeLmJyaWRnZS52MS5MaXN0QnJpZGdlc1Jlc3BvbnNlEk8KDERlbGV0ZUJyaWRnZRIeLmJyaWRnZS52MS5EZWxldGVCcmlkZ2VSZXF1ZXN0Gh8uYnJpZGdlLnYxLkRlbGV0ZUJyaWRnZVJlc3BvbnNlQpwBCg1jb20uYnJpZGdlLnYxQhJBZG1pbmlzdHJhdG9yUHJvdG9QAVoyZ2l0aHViLmNvbS92ZXJjZWwvYnJpZGdlL2FwaS9nby9icmlkZ2UvdjE7YnJpZGdldjGiAgNCWFiqAglCcmlkZ2UuVjHKAglCcmlkZ2VcVjHiAhVCcmlkZ2VcVjFcR1BCTWV0YWRhdGHqAgpCcmlkZ2U6OlYxYgZwcm90bzM");
11+
fileDesc("Ch1icmlkZ2UvdjEvYWRtaW5pc3RyYXRvci5wcm90bxIJYnJpZGdlLnYxIpwBChNDcmVhdGVCcmlkZ2VSZXF1ZXN0EhwKCWRldmljZV9pZBgBIAEoCVIJZGV2aWNlX2lkEiwKEXNvdXJjZV9kZXBsb3ltZW50GAIgASgJUhFzb3VyY2VfZGVwbG95bWVudBIqChBzb3VyY2VfbmFtZXNwYWNlGAMgASgJUhBzb3VyY2VfbmFtZXNwYWNlEg0KBWZvcmNlGAQgASgIIu0BChRDcmVhdGVCcmlkZ2VSZXNwb25zZRIRCgluYW1lc3BhY2UYASABKAkSGgoIcG9kX25hbWUYAiABKAlSCHBvZF9uYW1lEgwKBHBvcnQYAyABKAUSKAoPZGVwbG95bWVudF9uYW1lGAQgASgJUg9kZXBsb3ltZW50X25hbWUSPgoIZW52X3ZhcnMYBSADKAsyLC5icmlkZ2UudjEuQ3JlYXRlQnJpZGdlUmVzcG9uc2UuRW52VmFyc0VudHJ5Gi4KDEVudlZhcnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIjIKEkxpc3RCcmlkZ2VzUmVxdWVzdBIcCglkZXZpY2VfaWQYASABKAlSCWRldmljZV9pZCLxAQoKQnJpZGdlSW5mbxIcCglkZXZpY2VfaWQYASABKAlSCWRldmljZV9pZBIsChFzb3VyY2VfZGVwbG95bWVudBgCIAEoCVIRc291cmNlX2RlcGxveW1lbnQSKgoQc291cmNlX25hbWVzcGFjZRgDIAEoCVIQc291cmNlX25hbWVzcGFjZRIRCgluYW1lc3BhY2UYBCABKAkSHgoKY3JlYXRlZF9hdBgFIAEoCVIKY3JlYXRlZF9hdBIOCgZzdGF0dXMYBiABKAkSKAoPZGVwbG95bWVudF9uYW1lGAcgASgJUg9kZXBsb3ltZW50X25hbWUiPQoTTGlzdEJyaWRnZXNSZXNwb25zZRImCgdicmlkZ2VzGAEgAygLMhUuYnJpZGdlLnYxLkJyaWRnZUluZm8iQQoTRGVsZXRlQnJpZGdlUmVxdWVzdBIcCglkZXZpY2VfaWQYASABKAlSCWRldmljZV9pZBIMCgRuYW1lGAIgASgJIhYKFERlbGV0ZUJyaWRnZVJlc3BvbnNlMoYCChRBZG1pbmlzdHJhdG9yU2VydmljZRJPCgxDcmVhdGVCcmlkZ2USHi5icmlkZ2UudjEuQ3JlYXRlQnJpZGdlUmVxdWVzdBofLmJyaWRnZS52MS5DcmVhdGVCcmlkZ2VSZXNwb25zZRJMCgtMaXN0QnJpZGdlcxIdLmJyaWRnZS52MS5MaXN0QnJpZGdlc1JlcXVlc3QaHi5icmlkZ2UudjEuTGlzdEJyaWRnZXNSZXNwb25zZRJPCgxEZWxldGVCcmlkZ2USHi5icmlkZ2UudjEuRGVsZXRlQnJpZGdlUmVxdWVzdBofLmJyaWRnZS52MS5EZWxldGVCcmlkZ2VSZXNwb25zZUKcAQoNY29tLmJyaWRnZS52MUISQWRtaW5pc3RyYXRvclByb3RvUAFaMmdpdGh1Yi5jb20vdmVyY2VsL2JyaWRnZS9hcGkvZ28vYnJpZGdlL3YxO2JyaWRnZXYxogIDQlhYqgIJQnJpZGdlLlYxygIJQnJpZGdlXFYx4gIVQnJpZGdlXFYxXEdQQk1ldGFkYXRh6gIKQnJpZGdlOjpWMWIGcHJvdG8z");
1212

1313
/**
1414
* Describes the message bridge.v1.CreateBridgeRequest.

pkg/admin/admin.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ type CreateResponse struct {
3434
EnvVars map[string]string
3535
}
3636

37-
// BridgeInfo describes an existing bridge.
37+
// BridgeInfo describes an existing bridge deployment.
3838
type BridgeInfo struct {
3939
DeviceID string
4040
SourceDeployment string
4141
SourceNamespace string
4242
Namespace string
43+
DeploymentName string
4344
CreatedAt string
44-
Status string
4545
}

pkg/admin/local.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -146,20 +146,23 @@ func (l *localAdmin) ListBridges(ctx context.Context, deviceID string) ([]*Bridg
146146
return nil, fmt.Errorf("device_id is required")
147147
}
148148

149-
namespaces, err := namespace.ListBridgeNamespaces(ctx, l.client, deviceID)
149+
nsName := identity.NamespaceForDevice(deviceID)
150+
deploys, err := l.client.AppsV1().Deployments(nsName).List(ctx, metav1.ListOptions{
151+
LabelSelector: meta.ProxySelector,
152+
})
150153
if err != nil {
151-
return nil, fmt.Errorf("failed to list bridge namespaces: %w", err)
154+
return nil, fmt.Errorf("failed to list bridge deployments: %w", err)
152155
}
153156

154157
var bridges []*BridgeInfo
155-
for _, ns := range namespaces {
158+
for _, d := range deploys.Items {
156159
bridges = append(bridges, &BridgeInfo{
157-
DeviceID: ns.Labels[meta.LabelDeviceID],
158-
SourceDeployment: ns.Labels[meta.LabelWorkloadSource],
159-
SourceNamespace: ns.Labels[meta.LabelWorkloadSourceNamespace],
160-
Namespace: ns.Name,
161-
CreatedAt: ns.CreationTimestamp.Format(time.RFC3339),
162-
Status: string(ns.Status.Phase),
160+
DeviceID: deviceID,
161+
SourceDeployment: d.Labels[meta.LabelWorkloadSource],
162+
SourceNamespace: d.Labels[meta.LabelWorkloadSourceNamespace],
163+
Namespace: nsName,
164+
DeploymentName: d.Name,
165+
CreatedAt: d.CreationTimestamp.Format(time.RFC3339),
163166
})
164167
}
165168
return bridges, nil

pkg/admin/remote.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ func (r *remoteAdmin) ListBridges(ctx context.Context, deviceID string) ([]*Brid
6767
SourceDeployment: b.SourceDeployment,
6868
SourceNamespace: b.SourceNamespace,
6969
Namespace: b.Namespace,
70+
DeploymentName: b.DeploymentName,
7071
CreatedAt: b.CreatedAt,
71-
Status: b.Status,
7272
}
7373
}
7474
return bridges, nil

pkg/commands/administrator.go

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

proto/bridge/v1/administrator.proto

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ message BridgeInfo {
7575

7676
// Current status of the bridge (e.g., "running", "pending", "error").
7777
string status = 6;
78+
79+
// The name of the bridge Deployment.
80+
string deployment_name = 7 [json_name = "deployment_name"];
7881
}
7982

8083
// ListBridgesResponse contains all active bridges matching the filter.
@@ -87,9 +90,8 @@ message DeleteBridgeRequest {
8790
// The device ID that owns the bridge.
8891
string device_id = 1 [json_name = "device_id"];
8992

90-
// The source deployment name to identify which bridge to delete.
91-
// If empty, deletes the entire device namespace and all bridges within it.
92-
string source_deployment = 2 [json_name = "source_deployment"];
93+
// The name of the bridge to delete.
94+
string name = 2;
9395
}
9496

9597
// DeleteBridgeResponse is returned after a bridge is torn down.

0 commit comments

Comments
 (0)