mirror of
https://github.com/containerd/containerd.git
synced 2026-06-24 08:48:48 +00:00
Add default sandboxer to client
Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
@@ -114,7 +114,11 @@ func New(address string, opts ...Opt) (*Client, error) {
|
||||
}
|
||||
|
||||
if copts.defaultRuntime != "" {
|
||||
c.runtime.value = copts.defaultRuntime
|
||||
c.defaults.runtime = copts.defaultRuntime
|
||||
}
|
||||
|
||||
if copts.defaultSandboxer != "" {
|
||||
c.defaults.sandboxer = copts.defaultSandboxer
|
||||
}
|
||||
|
||||
if copts.defaultPlatform != nil {
|
||||
@@ -190,7 +194,11 @@ func NewWithConn(conn *grpc.ClientConn, opts ...Opt) (*Client, error) {
|
||||
}
|
||||
|
||||
if copts.defaultRuntime != "" {
|
||||
c.runtime.value = copts.defaultRuntime
|
||||
c.defaults.runtime = copts.defaultRuntime
|
||||
}
|
||||
|
||||
if copts.defaultSandboxer != "" {
|
||||
c.defaults.sandboxer = copts.defaultSandboxer
|
||||
}
|
||||
|
||||
if copts.defaultPlatform != nil {
|
||||
@@ -215,10 +223,11 @@ type Client struct {
|
||||
platform platforms.MatchComparer
|
||||
connector func() (*grpc.ClientConn, error)
|
||||
|
||||
// this should only be accessed via defaultRuntime()
|
||||
runtime struct {
|
||||
value string
|
||||
mut sync.Mutex
|
||||
// this should only be accessed via default*() functions
|
||||
defaults struct {
|
||||
runtime string
|
||||
sandboxer string
|
||||
mut sync.Mutex
|
||||
}
|
||||
}
|
||||
|
||||
@@ -245,11 +254,11 @@ func (c *Client) Runtime() string {
|
||||
}
|
||||
|
||||
func (c *Client) defaultRuntime(ctx context.Context) (string, error) {
|
||||
c.runtime.mut.Lock()
|
||||
defer c.runtime.mut.Unlock()
|
||||
c.defaults.mut.Lock()
|
||||
defer c.defaults.mut.Unlock()
|
||||
|
||||
if c.runtime.value != "" {
|
||||
return c.runtime.value, nil
|
||||
if c.defaults.runtime != "" {
|
||||
return c.defaults.runtime, nil
|
||||
}
|
||||
|
||||
if c.defaultns != "" {
|
||||
@@ -259,12 +268,35 @@ func (c *Client) defaultRuntime(ctx context.Context) (string, error) {
|
||||
return defaults.DefaultRuntime, fmt.Errorf("failed to get default runtime label: %w", err)
|
||||
}
|
||||
if label != "" {
|
||||
c.runtime.value = label
|
||||
c.defaults.runtime = label
|
||||
return label, nil
|
||||
}
|
||||
}
|
||||
c.runtime.value = defaults.DefaultRuntime
|
||||
return c.runtime.value, nil
|
||||
c.defaults.runtime = defaults.DefaultRuntime
|
||||
return c.defaults.runtime, nil
|
||||
}
|
||||
|
||||
func (c *Client) defaultSandboxer(ctx context.Context) (string, error) {
|
||||
c.defaults.mut.Lock()
|
||||
defer c.defaults.mut.Unlock()
|
||||
|
||||
if c.defaults.sandboxer != "" {
|
||||
return c.defaults.sandboxer, nil
|
||||
}
|
||||
|
||||
if c.defaultns != "" {
|
||||
label, err := c.GetLabel(ctx, defaults.DefaultSandboxerNSLabel)
|
||||
if err != nil {
|
||||
// Don't set the sandboxer value if there's an error
|
||||
return defaults.DefaultSandboxer, fmt.Errorf("failed to get default sandboxer label: %w", err)
|
||||
}
|
||||
if label != "" {
|
||||
c.defaults.sandboxer = label
|
||||
return label, nil
|
||||
}
|
||||
}
|
||||
c.defaults.sandboxer = defaults.DefaultSandboxer
|
||||
return c.defaults.sandboxer, nil
|
||||
}
|
||||
|
||||
// IsServing returns true if the client can successfully connect to the
|
||||
|
||||
@@ -30,14 +30,15 @@ import (
|
||||
)
|
||||
|
||||
type clientOpts struct {
|
||||
defaultns string
|
||||
defaultRuntime string
|
||||
defaultPlatform platforms.MatchComparer
|
||||
services *services
|
||||
dialOptions []grpc.DialOption
|
||||
extraDialOpts []grpc.DialOption
|
||||
callOptions []grpc.CallOption
|
||||
timeout time.Duration
|
||||
defaultns string
|
||||
defaultRuntime string
|
||||
defaultSandboxer string
|
||||
defaultPlatform platforms.MatchComparer
|
||||
services *services
|
||||
dialOptions []grpc.DialOption
|
||||
extraDialOpts []grpc.DialOption
|
||||
callOptions []grpc.CallOption
|
||||
timeout time.Duration
|
||||
}
|
||||
|
||||
// Opt allows callers to set options on the containerd client
|
||||
@@ -62,6 +63,14 @@ func WithDefaultRuntime(rt string) Opt {
|
||||
}
|
||||
}
|
||||
|
||||
// WithDefaultSandboxer sets the default sandboxer on the client
|
||||
func WithDefaultSandboxer(sb string) Opt {
|
||||
return func(c *clientOpts) error {
|
||||
c.defaultSandboxer = sb
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithDefaultPlatform sets the default platform matcher on the client
|
||||
func WithDefaultPlatform(platform platforms.MatchComparer) Opt {
|
||||
return func(c *clientOpts) error {
|
||||
|
||||
@@ -131,10 +131,15 @@ func (c *Client) NewSandbox(ctx context.Context, sandboxID string, opts ...NewSa
|
||||
return nil, errors.New("sandbox ID must be specified")
|
||||
}
|
||||
|
||||
sandboxer, err := c.defaultSandboxer(ctx)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get default sandboxer: %w", err)
|
||||
}
|
||||
newSandbox := api.Sandbox{
|
||||
ID: sandboxID,
|
||||
CreatedAt: time.Now().UTC(),
|
||||
UpdatedAt: time.Now().UTC(),
|
||||
Sandboxer: sandboxer,
|
||||
}
|
||||
|
||||
for _, opt := range opts {
|
||||
|
||||
@@ -29,4 +29,9 @@ const (
|
||||
// DefaultSnapshotterNSLabel defines the namespace label to check for the
|
||||
// default snapshotter
|
||||
DefaultSnapshotterNSLabel = "containerd.io/defaults/snapshotter"
|
||||
// DefaultSandboxerNSLabel defines the namespace label to check for the
|
||||
// default sandboxcr
|
||||
DefaultSandboxerNSLabel = "containerd.io/defaults/sandboxer"
|
||||
// DefaultSandboxer defines the default sandboxer to use for creating sandboxes.
|
||||
DefaultSandboxer = "shim"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user