diff --git a/linux/bundle.go b/linux/bundle.go index 07a96d37b..1bad91270 100644 --- a/linux/bundle.go +++ b/linux/bundle.go @@ -11,7 +11,8 @@ import ( "github.com/containerd/containerd/events/exchange" "github.com/containerd/containerd/linux/runcopts" - client "github.com/containerd/containerd/linux/shim" + "github.com/containerd/containerd/linux/shim" + "github.com/containerd/containerd/linux/shim/client" "github.com/pkg/errors" ) @@ -71,26 +72,26 @@ type bundle struct { } // ShimOpt specifies shim options for initialization and connection -type ShimOpt func(*bundle, string, *runcopts.RuncOptions) (client.Config, client.ClientOpt) +type ShimOpt func(*bundle, string, *runcopts.RuncOptions) (shim.Config, client.ClientOpt) // ShimRemote is a ShimOpt for connecting and starting a remote shim -func ShimRemote(shim, daemonAddress, cgroup string, nonewns, debug bool, exitHandler func()) ShimOpt { - return func(b *bundle, ns string, ropts *runcopts.RuncOptions) (client.Config, client.ClientOpt) { +func ShimRemote(shimBinary, daemonAddress, cgroup string, nonewns, debug bool, exitHandler func()) ShimOpt { + return func(b *bundle, ns string, ropts *runcopts.RuncOptions) (shim.Config, client.ClientOpt) { return b.shimConfig(ns, ropts), - client.WithStart(shim, b.shimAddress(ns), daemonAddress, cgroup, nonewns, debug, exitHandler) + client.WithStart(shimBinary, b.shimAddress(ns), daemonAddress, cgroup, nonewns, debug, exitHandler) } } // ShimLocal is a ShimOpt for using an in process shim implementation func ShimLocal(exchange *exchange.Exchange) ShimOpt { - return func(b *bundle, ns string, ropts *runcopts.RuncOptions) (client.Config, client.ClientOpt) { + return func(b *bundle, ns string, ropts *runcopts.RuncOptions) (shim.Config, client.ClientOpt) { return b.shimConfig(ns, ropts), client.WithLocal(exchange) } } // ShimConnect is a ShimOpt for connecting to an existing remote shim func ShimConnect() ShimOpt { - return func(b *bundle, ns string, ropts *runcopts.RuncOptions) (client.Config, client.ClientOpt) { + return func(b *bundle, ns string, ropts *runcopts.RuncOptions) (shim.Config, client.ClientOpt) { return b.shimConfig(ns, ropts), client.WithConnect(b.shimAddress(ns)) } } @@ -119,7 +120,7 @@ func (b *bundle) shimAddress(namespace string) string { return filepath.Join(string(filepath.Separator), "containerd-shim", namespace, b.id, "shim.sock") } -func (b *bundle) shimConfig(namespace string, runcOptions *runcopts.RuncOptions) client.Config { +func (b *bundle) shimConfig(namespace string, runcOptions *runcopts.RuncOptions) shim.Config { var ( criuPath string runtimeRoot string @@ -130,7 +131,7 @@ func (b *bundle) shimConfig(namespace string, runcOptions *runcopts.RuncOptions) systemdCgroup = runcOptions.SystemdCgroup runtimeRoot = runcOptions.RuntimeRoot } - return client.Config{ + return shim.Config{ Path: b.path, WorkDir: b.workDir, Namespace: namespace, diff --git a/linux/shim/client.go b/linux/shim/client/client.go similarity index 87% rename from linux/shim/client.go rename to linux/shim/client/client.go index ac18e1d63..367d7150e 100644 --- a/linux/shim/client.go +++ b/linux/shim/client/client.go @@ -1,6 +1,6 @@ // +build !windows -package shim +package client import ( "context" @@ -20,19 +20,23 @@ import ( "github.com/sirupsen/logrus" "github.com/containerd/containerd/events" - shim "github.com/containerd/containerd/linux/shim/v1" + "github.com/containerd/containerd/linux/shim" + shimapi "github.com/containerd/containerd/linux/shim/v1" "github.com/containerd/containerd/log" "github.com/containerd/containerd/reaper" "github.com/containerd/containerd/sys" + google_protobuf "github.com/golang/protobuf/ptypes/empty" "google.golang.org/grpc" ) +var empty = &google_protobuf.Empty{} + // ClientOpt is an option for a shim client configuration -type ClientOpt func(context.Context, Config) (shim.ShimClient, io.Closer, error) +type ClientOpt func(context.Context, shim.Config) (shimapi.ShimClient, io.Closer, error) // WithStart executes a new shim process func WithStart(binary, address, daemonAddress, cgroup string, nonewns, debug bool, exitHandler func()) ClientOpt { - return func(ctx context.Context, config Config) (_ shim.ShimClient, _ io.Closer, err error) { + return func(ctx context.Context, config shim.Config) (_ shimapi.ShimClient, _ io.Closer, err error) { socket, err := newSocket(address) if err != nil { return nil, nil, err @@ -84,7 +88,7 @@ func WithStart(binary, address, daemonAddress, cgroup string, nonewns, debug boo } } -func newCommand(binary, daemonAddress string, nonewns, debug bool, config Config, socket *os.File) *exec.Cmd { +func newCommand(binary, daemonAddress string, nonewns, debug bool, config shim.Config, socket *os.File) *exec.Cmd { args := []string{ "-namespace", config.Namespace, "-workdir", config.WorkDir, @@ -161,38 +165,28 @@ func dialAddress(address string) string { // WithConnect connects to an existing shim func WithConnect(address string) ClientOpt { - return func(ctx context.Context, config Config) (shim.ShimClient, io.Closer, error) { + return func(ctx context.Context, config shim.Config) (shimapi.ShimClient, io.Closer, error) { conn, err := connect(address, annonDialer) if err != nil { return nil, nil, err } - return shim.NewShimClient(conn), conn, nil + return shimapi.NewShimClient(conn), conn, nil } } // WithLocal uses an in process shim -func WithLocal(publisher events.Publisher) func(context.Context, Config) (shim.ShimClient, io.Closer, error) { - return func(ctx context.Context, config Config) (shim.ShimClient, io.Closer, error) { - service, err := NewService(config, publisher) +func WithLocal(publisher events.Publisher) func(context.Context, shim.Config) (shimapi.ShimClient, io.Closer, error) { + return func(ctx context.Context, config shim.Config) (shimapi.ShimClient, io.Closer, error) { + service, err := shim.NewService(config, publisher) if err != nil { return nil, nil, err } - return NewLocal(service), nil, nil + return shim.NewLocal(service), nil, nil } } -// Config contains shim specific configuration -type Config struct { - Path string - Namespace string - WorkDir string - Criu string - RuntimeRoot string - SystemdCgroup bool -} - // New returns a new shim client -func New(ctx context.Context, config Config, opt ClientOpt) (*Client, error) { +func New(ctx context.Context, config shim.Config, opt ClientOpt) (*Client, error) { s, c, err := opt(ctx, config) if err != nil { return nil, err @@ -206,7 +200,7 @@ func New(ctx context.Context, config Config, opt ClientOpt) (*Client, error) { // Client is a shim client containing the connection to a shim type Client struct { - shim.ShimClient + shimapi.ShimClient c io.Closer exitCh chan struct{} diff --git a/linux/shim/client_linux.go b/linux/shim/client/client_linux.go similarity index 97% rename from linux/shim/client_linux.go rename to linux/shim/client/client_linux.go index 515e88c47..03ebba00c 100644 --- a/linux/shim/client_linux.go +++ b/linux/shim/client/client_linux.go @@ -1,6 +1,6 @@ // +build linux -package shim +package client import ( "os/exec" diff --git a/linux/shim/client_unix.go b/linux/shim/client/client_unix.go similarity index 94% rename from linux/shim/client_unix.go rename to linux/shim/client/client_unix.go index d478f3dd7..b34cf4d36 100644 --- a/linux/shim/client_unix.go +++ b/linux/shim/client/client_unix.go @@ -1,6 +1,6 @@ // +build !linux,!windows -package shim +package client import ( "os/exec" diff --git a/linux/shim/service.go b/linux/shim/service.go index 9c9f50602..7b5c5e116 100644 --- a/linux/shim/service.go +++ b/linux/shim/service.go @@ -32,6 +32,16 @@ var empty = &google_protobuf.Empty{} // RuncRoot is the path to the root runc state directory const RuncRoot = "/run/containerd/runc" +// Config contains shim specific configuration +type Config struct { + Path string + Namespace string + WorkDir string + Criu string + RuntimeRoot string + SystemdCgroup bool +} + // NewService returns a new shim service that can be used via GRPC func NewService(config Config, publisher events.Publisher) (*Service, error) { if config.Namespace == "" { diff --git a/linux/task.go b/linux/task.go index a851ee77e..268e91a94 100644 --- a/linux/task.go +++ b/linux/task.go @@ -11,7 +11,7 @@ import ( "github.com/containerd/cgroups" "github.com/containerd/containerd/api/types/task" "github.com/containerd/containerd/errdefs" - client "github.com/containerd/containerd/linux/shim" + "github.com/containerd/containerd/linux/shim/client" shim "github.com/containerd/containerd/linux/shim/v1" "github.com/containerd/containerd/runtime" "github.com/gogo/protobuf/types"