sandbox: add sandbox controller v2

Signed-off-by: Abel Feng <fshb1988@gmail.com>
This commit is contained in:
Abel Feng
2024-02-21 15:42:31 +08:00
parent 37943cf6e4
commit e4df672ab8
8 changed files with 71 additions and 18 deletions

View File

@@ -31,14 +31,15 @@ import (
// remoteSandboxController is a low level GRPC client for containerd's sandbox controller service
type remoteSandboxController struct {
client api.ControllerClient
client api.ControllerClient
sandboxerName string
}
var _ sandbox.Controller = (*remoteSandboxController)(nil)
// NewSandboxController creates a client for a sandbox controller
func NewSandboxController(client api.ControllerClient) sandbox.Controller {
return &remoteSandboxController{client: client}
func NewSandboxController(client api.ControllerClient, name string) sandbox.Controller {
return &remoteSandboxController{client: client, sandboxerName: name}
}
func (s *remoteSandboxController) Create(ctx context.Context, sandboxInfo sandbox.Sandbox, opts ...sandbox.CreateOpt) error {
@@ -54,6 +55,7 @@ func (s *remoteSandboxController) Create(ctx context.Context, sandboxInfo sandbo
NetnsPath: options.NetNSPath,
Annotations: options.Annotations,
Sandbox: apiSandbox,
Sandboxer: s.sandboxerName,
})
if err != nil {
return errdefs.FromGRPC(err)
@@ -63,7 +65,10 @@ func (s *remoteSandboxController) Create(ctx context.Context, sandboxInfo sandbo
}
func (s *remoteSandboxController) Start(ctx context.Context, sandboxID string) (sandbox.ControllerInstance, error) {
resp, err := s.client.Start(ctx, &api.ControllerStartRequest{SandboxID: sandboxID})
resp, err := s.client.Start(ctx, &api.ControllerStartRequest{
SandboxID: sandboxID,
Sandboxer: s.sandboxerName,
})
if err != nil {
return sandbox.ControllerInstance{}, errdefs.FromGRPC(err)
}
@@ -79,7 +84,10 @@ func (s *remoteSandboxController) Start(ctx context.Context, sandboxID string) (
}
func (s *remoteSandboxController) Platform(ctx context.Context, sandboxID string) (imagespec.Platform, error) {
resp, err := s.client.Platform(ctx, &api.ControllerPlatformRequest{SandboxID: sandboxID})
resp, err := s.client.Platform(ctx, &api.ControllerPlatformRequest{
SandboxID: sandboxID,
Sandboxer: s.sandboxerName,
})
if err != nil {
return imagespec.Platform{}, errdefs.FromGRPC(err)
}
@@ -97,7 +105,10 @@ func (s *remoteSandboxController) Stop(ctx context.Context, sandboxID string, op
for _, opt := range opts {
opt(&soptions)
}
req := &api.ControllerStopRequest{SandboxID: sandboxID}
req := &api.ControllerStopRequest{
SandboxID: sandboxID,
Sandboxer: s.sandboxerName,
}
if soptions.Timeout != nil {
req.TimeoutSecs = uint32(soptions.Timeout.Seconds())
}
@@ -110,7 +121,10 @@ func (s *remoteSandboxController) Stop(ctx context.Context, sandboxID string, op
}
func (s *remoteSandboxController) Shutdown(ctx context.Context, sandboxID string) error {
_, err := s.client.Shutdown(ctx, &api.ControllerShutdownRequest{SandboxID: sandboxID})
_, err := s.client.Shutdown(ctx, &api.ControllerShutdownRequest{
SandboxID: sandboxID,
Sandboxer: s.sandboxerName,
})
if err != nil {
return errdefs.FromGRPC(err)
}
@@ -127,7 +141,10 @@ func (s *remoteSandboxController) Wait(ctx context.Context, sandboxID string) (s
retryInterval time.Duration = 128
)
for {
resp, err = s.client.Wait(ctx, &api.ControllerWaitRequest{SandboxID: sandboxID})
resp, err = s.client.Wait(ctx, &api.ControllerWaitRequest{
SandboxID: sandboxID,
Sandboxer: s.sandboxerName,
})
if err != nil {
grpcErr := errdefs.FromGRPC(err)
if !errdefs.IsUnavailable(grpcErr) {
@@ -153,7 +170,11 @@ func (s *remoteSandboxController) Wait(ctx context.Context, sandboxID string) (s
}
func (s *remoteSandboxController) Status(ctx context.Context, sandboxID string, verbose bool) (sandbox.ControllerStatus, error) {
resp, err := s.client.Status(ctx, &api.ControllerStatusRequest{SandboxID: sandboxID, Verbose: verbose})
resp, err := s.client.Status(ctx, &api.ControllerStatusRequest{
SandboxID: sandboxID,
Verbose: verbose,
Sandboxer: s.sandboxerName,
})
if err != nil {
return sandbox.ControllerStatus{}, errdefs.FromGRPC(err)
}
@@ -171,7 +192,10 @@ func (s *remoteSandboxController) Status(ctx context.Context, sandboxID string,
}
func (s *remoteSandboxController) Metrics(ctx context.Context, sandboxID string) (*types.Metric, error) {
resp, err := s.client.Metrics(ctx, &api.ControllerMetricsRequest{SandboxID: sandboxID})
resp, err := s.client.Metrics(ctx, &api.ControllerMetricsRequest{
SandboxID: sandboxID,
Sandboxer: s.sandboxerName,
})
if err != nil {
return nil, errdefs.FromGRPC(err)
}