Files
OpenShell/sdk/go/openshell/v1/config_client.go
Drew Newberry d91b1999a0 feat(api)!: use sandbox names as canonical RPC references (#3272)
* feat(api)!: use sandbox names as canonical references

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* test(cli): update forward color fixture for workspace scope

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* fix(supervisor): use sandbox names for settings lookup

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* test(e2e): use canonical sandbox request fields

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* test(e2e): use canonical sandbox receipt field

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* fix(server): harden sandbox mutation handling

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* fix(ci): update rebased sandbox references

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* feat(api)!: standardize canonical entity references

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* docs(api): codify protobuf API conventions

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* fix(api): preserve workspace selector semantics

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* fix(api): restore workspace selector parity

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* fix(api): preserve descriptive name fields

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* fix(api): update e2e request fixtures

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* fix(core): omit workspace selector during bootstrap

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* chore(api): remove proto convention checker

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* chore(api): refresh schema fingerprints after rebase

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* fix(cli): use canonical provider receipt field

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

---------

Signed-off-by: Drew Newberry <anewberry@nvidia.com>
2026-09-18 11:39:55 -07:00

69 lines
2.2 KiB
Go

// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
package v1
import (
"context"
"github.com/NVIDIA/OpenShell/sdk/go/openshell/v1/internal/converter"
pb "github.com/NVIDIA/OpenShell/sdk/go/proto/openshellv1"
sbv1 "github.com/NVIDIA/OpenShell/sdk/go/proto/sandboxv1"
"google.golang.org/grpc"
)
type configClient struct {
client pb.OpenShellClient
sandboxes SandboxInterface
}
func newConfigClient(conn grpc.ClientConnInterface, sandboxes SandboxInterface) *configClient {
return &configClient{client: pb.NewOpenShellClient(conn), sandboxes: sandboxes}
}
func (c *configClient) GetSandbox(ctx context.Context, workspace, sandboxName string) (*SandboxConfig, error) {
if sandboxName == "" {
return nil, &StatusError{Code: ErrorInvalidArgument, Message: "sandbox name must not be empty"}
}
if _, err := c.sandboxes.Get(ctx, workspace, sandboxName); err != nil {
return nil, err
}
resp, err := c.client.GetSandboxConfig(ctx, &sbv1.GetSandboxConfigRequest{
Name: sandboxName,
WorkspaceScope: namedWorkspaceScope(workspace),
})
if err != nil {
return nil, converter.FromGRPCError(err)
}
return converter.SandboxConfigFromProto(resp), nil
}
func (c *configClient) GetGateway(ctx context.Context) (*GatewayConfig, error) {
resp, err := c.client.GetGatewayConfig(ctx, &sbv1.GetGatewayConfigRequest{})
if err != nil {
return nil, converter.FromGRPCError(err)
}
return converter.GatewayConfigFromProto(resp), nil
}
func (c *configClient) Update(ctx context.Context, workspace string, update *ConfigUpdate) (*ConfigUpdateResult, error) {
if update == nil {
return nil, &StatusError{
Code: ErrorInvalidArgument,
Message: "update must not be nil",
}
}
req, convErr := converter.ConfigUpdateToProto(update)
if convErr != nil {
return nil, &StatusError{Code: ErrorInvalidArgument, Message: convErr.Error()}
}
if !req.GetGlobal() {
req.WorkspaceScope = namedWorkspaceScope(workspace)
}
resp, err := c.client.UpdateConfig(ctx, req)
if err != nil {
return nil, converter.FromGRPCError(err)
}
return converter.ConfigUpdateResultFromProto(resp), nil
}