From 4743f1fc4ce91043b4c1cf2cccc7485dff295b48 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Wed, 25 Oct 2017 11:10:00 -0400 Subject: [PATCH 1/3] Move NewClient and AppContext to commands pkg Signed-off-by: Michael Crosby --- cmd/ctr/apply.go | 3 ++- cmd/ctr/attach.go | 3 ++- cmd/ctr/checkpoint.go | 3 ++- cmd/ctr/commands/client.go | 40 +++++++++++++++++++++++++++++++++++++ cmd/ctr/container_delete.go | 3 ++- cmd/ctr/containers.go | 3 ++- cmd/ctr/content.go | 14 ++++++------- cmd/ctr/events.go | 3 ++- cmd/ctr/exec.go | 3 ++- cmd/ctr/export.go | 3 ++- cmd/ctr/fetch.go | 2 +- cmd/ctr/fetchobject.go | 2 +- cmd/ctr/images.go | 8 ++++---- cmd/ctr/import.go | 2 +- cmd/ctr/info.go | 2 +- cmd/ctr/kill.go | 3 ++- cmd/ctr/labels.go | 2 +- cmd/ctr/namespaces.go | 8 ++++---- cmd/ctr/pause.go | 7 +++++-- cmd/ctr/plugins.go | 3 ++- cmd/ctr/ps.go | 3 ++- cmd/ctr/pull.go | 2 +- cmd/ctr/push.go | 2 +- cmd/ctr/pushobject.go | 2 +- cmd/ctr/resume.go | 7 +++++-- cmd/ctr/rootfs.go | 2 +- cmd/ctr/run.go | 2 +- cmd/ctr/snapshot.go | 20 +++++++++---------- cmd/ctr/start.go | 3 ++- cmd/ctr/task.go | 3 ++- cmd/ctr/task_delete.go | 7 +++++-- cmd/ctr/utils.go | 35 -------------------------------- cmd/ctr/version.go | 3 ++- 33 files changed, 118 insertions(+), 90 deletions(-) create mode 100644 cmd/ctr/commands/client.go diff --git a/cmd/ctr/apply.go b/cmd/ctr/apply.go index bbd702bf5..b43b4484b 100644 --- a/cmd/ctr/apply.go +++ b/cmd/ctr/apply.go @@ -5,6 +5,7 @@ import ( "github.com/containerd/containerd/archive" "github.com/containerd/containerd/archive/compression" + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/containerd/containerd/log" "github.com/urfave/cli" ) @@ -18,7 +19,7 @@ var applyCommand = cli.Command{ var ( dir = context.Args().First() ) - ctx, cancel := appContext(context) + ctx, cancel := commands.AppContext(context) defer cancel() log.G(ctx).Info("applying layer from stdin") diff --git a/cmd/ctr/attach.go b/cmd/ctr/attach.go index 45f028984..9772141b8 100644 --- a/cmd/ctr/attach.go +++ b/cmd/ctr/attach.go @@ -5,6 +5,7 @@ import ( "github.com/containerd/console" "github.com/containerd/containerd" + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/sirupsen/logrus" "github.com/urfave/cli" ) @@ -14,7 +15,7 @@ var taskAttachCommand = cli.Command{ Usage: "attach to the IO of a running container", ArgsUsage: "CONTAINER", Action: func(context *cli.Context) error { - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/checkpoint.go b/cmd/ctr/checkpoint.go index 58cf949dd..6f4c2fdd9 100644 --- a/cmd/ctr/checkpoint.go +++ b/cmd/ctr/checkpoint.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/containerd/containerd" + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/pkg/errors" "github.com/urfave/cli" ) @@ -23,7 +24,7 @@ var taskCheckpointCommand = cli.Command{ if id == "" { return errors.New("container id must be provided") } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/commands/client.go b/cmd/ctr/commands/client.go new file mode 100644 index 000000000..675f54e5f --- /dev/null +++ b/cmd/ctr/commands/client.go @@ -0,0 +1,40 @@ +package commands + +import ( + gocontext "context" + + "github.com/containerd/containerd" + "github.com/containerd/containerd/namespaces" + "github.com/urfave/cli" +) + +// AppContext returns the context for a command. Should only be called once per +// command, near the start. +// +// This will ensure the namespace is picked up and set the timeout, if one is +// defined. +func AppContext(context *cli.Context) (gocontext.Context, gocontext.CancelFunc) { + var ( + ctx = gocontext.Background() + timeout = context.GlobalDuration("timeout") + namespace = context.GlobalString("namespace") + cancel gocontext.CancelFunc + ) + ctx = namespaces.WithNamespace(ctx, namespace) + if timeout > 0 { + ctx, cancel = gocontext.WithTimeout(ctx, timeout) + } else { + ctx, cancel = gocontext.WithCancel(ctx) + } + return ctx, cancel +} + +// NewClient returns a new containerd client +func NewClient(context *cli.Context) (*containerd.Client, gocontext.Context, gocontext.CancelFunc, error) { + client, err := containerd.New(context.GlobalString("address")) + if err != nil { + return nil, nil, nil, err + } + ctx, cancel := AppContext(context) + return client, ctx, cancel, nil +} diff --git a/cmd/ctr/container_delete.go b/cmd/ctr/container_delete.go index 1a50555f4..aaba165d3 100644 --- a/cmd/ctr/container_delete.go +++ b/cmd/ctr/container_delete.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/containerd/containerd" + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/containerd/containerd/log" "github.com/urfave/cli" ) @@ -23,7 +24,7 @@ var containersDeleteCommand = cli.Command{ }, Action: func(context *cli.Context) error { var exitErr error - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/containers.go b/cmd/ctr/containers.go index a46092d6b..c91d6d8ac 100644 --- a/cmd/ctr/containers.go +++ b/cmd/ctr/containers.go @@ -5,6 +5,7 @@ import ( "os" "text/tabwriter" + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/urfave/cli" ) @@ -29,7 +30,7 @@ var containersCommand = cli.Command{ filters = context.Args() quiet = context.Bool("quiet") ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/content.go b/cmd/ctr/content.go index 689ee4104..63587b1c5 100644 --- a/cmd/ctr/content.go +++ b/cmd/ctr/content.go @@ -46,7 +46,7 @@ var ( if err != nil { return err } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -90,7 +90,7 @@ var ( if ref == "" { return errors.New("must specify a transaction reference") } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -124,7 +124,7 @@ var ( }, Action: func(context *cli.Context) error { match := context.Args().First() - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -164,7 +164,7 @@ var ( quiet = context.Bool("quiet") args = []string(context.Args()) ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -214,7 +214,7 @@ var ( Flags: []cli.Flag{}, Action: func(context *cli.Context) error { object, labels := commands.ObjectWithLabelArgs(context) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -289,7 +289,7 @@ var ( if err != nil { return err } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -338,7 +338,7 @@ var ( args = []string(context.Args()) exitError error ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/events.go b/cmd/ctr/events.go index 7c0628852..ec8ffd065 100644 --- a/cmd/ctr/events.go +++ b/cmd/ctr/events.go @@ -5,6 +5,7 @@ import ( "fmt" eventsapi "github.com/containerd/containerd/api/services/events/v1" + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/containerd/typeurl" "github.com/urfave/cli" ) @@ -13,7 +14,7 @@ var eventsCommand = cli.Command{ Name: "events", Usage: "display containerd events", Action: func(context *cli.Context) error { - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/exec.go b/cmd/ctr/exec.go index 35bcc7c55..ecfddf27d 100644 --- a/cmd/ctr/exec.go +++ b/cmd/ctr/exec.go @@ -5,6 +5,7 @@ import ( "github.com/containerd/console" "github.com/containerd/containerd" + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/sirupsen/logrus" "github.com/urfave/cli" ) @@ -36,7 +37,7 @@ var taskExecCommand = cli.Command{ if id == "" { return errors.New("container id must be provided") } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/export.go b/cmd/ctr/export.go index 18285e55b..f2b4ea77a 100644 --- a/cmd/ctr/export.go +++ b/cmd/ctr/export.go @@ -4,6 +4,7 @@ import ( "io" "os" + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/containerd/containerd/reference" digest "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" @@ -38,7 +39,7 @@ var imagesExportCommand = cli.Command{ local = context.Args().Get(1) desc ocispec.Descriptor ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/fetch.go b/cmd/ctr/fetch.go index e67ac846d..a06afa271 100644 --- a/cmd/ctr/fetch.go +++ b/cmd/ctr/fetch.go @@ -51,7 +51,7 @@ Most of this is experimental and there are few leaps to make this work.`, } func fetch(ref string, cliContext *cli.Context) (containerd.Image, error) { - client, ctx, cancel, err := newClient(cliContext) + client, ctx, cancel, err := commands.NewClient(cliContext) if err != nil { return nil, err } diff --git a/cmd/ctr/fetchobject.go b/cmd/ctr/fetchobject.go index d801e723c..15cf346d9 100644 --- a/cmd/ctr/fetchobject.go +++ b/cmd/ctr/fetchobject.go @@ -23,7 +23,7 @@ var fetchObjectCommand = cli.Command{ var ( ref = context.Args().First() ) - ctx, cancel := appContext(context) + ctx, cancel := commands.AppContext(context) defer cancel() resolver, err := getResolver(ctx, context) diff --git a/cmd/ctr/images.go b/cmd/ctr/images.go index cf9b97f75..2c99bd4f9 100644 --- a/cmd/ctr/images.go +++ b/cmd/ctr/images.go @@ -47,7 +47,7 @@ var imagesListCommand = cli.Command{ filters = context.Args() quiet = context.Bool("quiet") ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -130,7 +130,7 @@ var imagesSetLabelsCommand = cli.Command{ replaceAll = context.Bool("replace-all") name, labels = commands.ObjectWithLabelArgs(context) ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -183,7 +183,7 @@ var imagesCheckCommand = cli.Command{ var ( exitErr error ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -263,7 +263,7 @@ var imageRemoveCommand = cli.Command{ Description: `Remove one or more images by reference.`, Flags: []cli.Flag{}, Action: func(context *cli.Context) error { - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/import.go b/cmd/ctr/import.go index 7c55ab21b..1a59feec5 100644 --- a/cmd/ctr/import.go +++ b/cmd/ctr/import.go @@ -31,7 +31,7 @@ var imagesImportCommand = cli.Command{ refObject = context.String("ref-object") labels = commands.LabelArgs(context.StringSlice("label")) ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/info.go b/cmd/ctr/info.go index fc5b0efce..e2eb63fbb 100644 --- a/cmd/ctr/info.go +++ b/cmd/ctr/info.go @@ -15,7 +15,7 @@ var containerInfoCommand = cli.Command{ if id == "" { return errors.New("container id must be provided") } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/kill.go b/cmd/ctr/kill.go index 39cac7aea..3d479ef3c 100644 --- a/cmd/ctr/kill.go +++ b/cmd/ctr/kill.go @@ -1,6 +1,7 @@ package main import ( + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/pkg/errors" "github.com/urfave/cli" ) @@ -41,7 +42,7 @@ var taskKillCommand = cli.Command{ if pid > 0 && all { return errors.New("enter a pid or all; not both") } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/labels.go b/cmd/ctr/labels.go index 019a446aa..62be97ac1 100644 --- a/cmd/ctr/labels.go +++ b/cmd/ctr/labels.go @@ -20,7 +20,7 @@ var containersSetLabelsCommand = cli.Command{ if containerID == "" { return errors.New("please specify a container") } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/namespaces.go b/cmd/ctr/namespaces.go index 8f8db9cde..a1d93c26b 100644 --- a/cmd/ctr/namespaces.go +++ b/cmd/ctr/namespaces.go @@ -35,7 +35,7 @@ var namespacesCreateCommand = cli.Command{ if namespace == "" { return errors.New("please specify a namespace") } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -56,7 +56,7 @@ var namespacesSetLabelsCommand = cli.Command{ if namespace == "" { return errors.New("please specify a namespace") } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -85,7 +85,7 @@ var namespacesListCommand = cli.Command{ }, Action: func(context *cli.Context) error { quiet := context.Bool("quiet") - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -131,7 +131,7 @@ var namespacesRemoveCommand = cli.Command{ Description: "Remove one or more namespaces. For now, the namespace must be empty.", Action: func(context *cli.Context) error { var exitErr error - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/pause.go b/cmd/ctr/pause.go index 03956d567..92944f67e 100644 --- a/cmd/ctr/pause.go +++ b/cmd/ctr/pause.go @@ -1,13 +1,16 @@ package main -import "github.com/urfave/cli" +import ( + "github.com/containerd/containerd/cmd/ctr/commands" + "github.com/urfave/cli" +) var taskPauseCommand = cli.Command{ Name: "pause", Usage: "pause an existing container", ArgsUsage: "CONTAINER", Action: func(context *cli.Context) error { - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/plugins.go b/cmd/ctr/plugins.go index 75e5ce523..9c987f799 100644 --- a/cmd/ctr/plugins.go +++ b/cmd/ctr/plugins.go @@ -9,6 +9,7 @@ import ( introspection "github.com/containerd/containerd/api/services/introspection/v1" "github.com/containerd/containerd/api/types" + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/containerd/containerd/platforms" ocispec "github.com/opencontainers/image-spec/specs-go/v1" "github.com/urfave/cli" @@ -33,7 +34,7 @@ var pluginsCommand = cli.Command{ quiet = context.Bool("quiet") detailed = context.Bool("detailed") ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/ps.go b/cmd/ctr/ps.go index ae52f2e46..058dec473 100644 --- a/cmd/ctr/ps.go +++ b/cmd/ctr/ps.go @@ -5,6 +5,7 @@ import ( "os" "text/tabwriter" + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/containerd/containerd/windows/hcsshimtypes" "github.com/pkg/errors" "github.com/urfave/cli" @@ -19,7 +20,7 @@ var taskPsCommand = cli.Command{ if id == "" { return errors.New("container id must be provided") } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/pull.go b/cmd/ctr/pull.go index 4b3dacdd9..d238b941e 100644 --- a/cmd/ctr/pull.go +++ b/cmd/ctr/pull.go @@ -27,7 +27,7 @@ command. As part of this process, we do the following: ref = context.Args().First() ) - ctx, cancel := appContext(context) + ctx, cancel := commands.AppContext(context) defer cancel() img, err := fetch(ref, context) diff --git a/cmd/ctr/push.go b/cmd/ctr/push.go index 4bd8e5193..c0c8e4420 100644 --- a/cmd/ctr/push.go +++ b/cmd/ctr/push.go @@ -52,7 +52,7 @@ var pushCommand = cli.Command{ local = context.Args().Get(1) desc ocispec.Descriptor ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/pushobject.go b/cmd/ctr/pushobject.go index ce8f71b81..57e804825 100644 --- a/cmd/ctr/pushobject.go +++ b/cmd/ctr/pushobject.go @@ -27,7 +27,7 @@ var pushObjectCommand = cli.Command{ if err != nil { return err } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/resume.go b/cmd/ctr/resume.go index 4f8158fe5..92d860711 100644 --- a/cmd/ctr/resume.go +++ b/cmd/ctr/resume.go @@ -1,13 +1,16 @@ package main -import "github.com/urfave/cli" +import ( + "github.com/containerd/containerd/cmd/ctr/commands" + "github.com/urfave/cli" +) var taskResumeCommand = cli.Command{ Name: "resume", Usage: "resume a paused container", ArgsUsage: "CONTAINER", Action: func(context *cli.Context) error { - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/rootfs.go b/cmd/ctr/rootfs.go index 56332af00..ac411e047 100644 --- a/cmd/ctr/rootfs.go +++ b/cmd/ctr/rootfs.go @@ -28,7 +28,7 @@ var rootfsUnpackCommand = cli.Command{ if err != nil { return err } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/run.go b/cmd/ctr/run.go index 80b71af78..e0f0a82b9 100644 --- a/cmd/ctr/run.go +++ b/cmd/ctr/run.go @@ -118,7 +118,7 @@ var runCommand = cli.Command{ if id == "" { return errors.New("container id must be provided") } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/snapshot.go b/cmd/ctr/snapshot.go index 6d714bf0b..5c5b5718e 100644 --- a/cmd/ctr/snapshot.go +++ b/cmd/ctr/snapshot.go @@ -38,7 +38,7 @@ var listSnapshotCommand = cli.Command{ Aliases: []string{"ls"}, Usage: "list snapshots", Action: func(context *cli.Context) error { - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -83,7 +83,7 @@ var usageSnapshotCommand = cli.Command{ return progress.Bytes(s).String() } } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -124,7 +124,7 @@ var removeSnapshotCommand = cli.Command{ ArgsUsage: " [, ...]", Usage: "remove snapshots", Action: func(context *cli.Context) error { - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -160,7 +160,7 @@ var prepareSnapshotCommand = cli.Command{ key = context.Args().Get(0) parent = context.Args().Get(1) ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -199,7 +199,7 @@ var viewSnapshotCommand = cli.Command{ key = context.Args().Get(0) parent = context.Args().Get(1) ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -232,7 +232,7 @@ var mountSnapshotCommand = cli.Command{ target = context.Args().Get(0) key = context.Args().Get(1) ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -261,7 +261,7 @@ var commitSnapshotCommand = cli.Command{ key = context.Args().Get(0) active = context.Args().Get(1) ) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -275,7 +275,7 @@ var treeSnapshotCommand = cli.Command{ Name: "tree", Usage: "display tree view of snapshot branches", Action: func(context *cli.Context) error { - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -315,7 +315,7 @@ var infoSnapshotCommand = cli.Command{ } key := context.Args().Get(0) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } @@ -340,7 +340,7 @@ var labelSnapshotCommand = cli.Command{ Flags: []cli.Flag{}, Action: func(context *cli.Context) error { key, labels := commands.ObjectWithLabelArgs(context) - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/start.go b/cmd/ctr/start.go index 93ced427d..87b72ebf1 100644 --- a/cmd/ctr/start.go +++ b/cmd/ctr/start.go @@ -2,6 +2,7 @@ package main import ( "github.com/containerd/console" + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/urfave/cli" @@ -25,7 +26,7 @@ var taskStartCommand = cli.Command{ if id == "" { return errors.New("container id must be provided") } - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/task.go b/cmd/ctr/task.go index 6dbc5ba4c..c103b7271 100644 --- a/cmd/ctr/task.go +++ b/cmd/ctr/task.go @@ -6,6 +6,7 @@ import ( "text/tabwriter" tasks "github.com/containerd/containerd/api/services/tasks/v1" + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/urfave/cli" ) @@ -32,7 +33,7 @@ var tasksCommand = cli.Command{ }, Action: func(context *cli.Context) error { quiet := context.Bool("quiet") - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/task_delete.go b/cmd/ctr/task_delete.go index aa5cbe7fc..dbae378c1 100644 --- a/cmd/ctr/task_delete.go +++ b/cmd/ctr/task_delete.go @@ -1,13 +1,16 @@ package main -import "github.com/urfave/cli" +import ( + "github.com/containerd/containerd/cmd/ctr/commands" + "github.com/urfave/cli" +) var taskDeleteCommand = cli.Command{ Name: "delete", Usage: "delete a task", ArgsUsage: "CONTAINER", Action: func(context *cli.Context) error { - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } diff --git a/cmd/ctr/utils.go b/cmd/ctr/utils.go index bd6fa8da3..c6fadc41a 100644 --- a/cmd/ctr/utils.go +++ b/cmd/ctr/utils.go @@ -16,8 +16,6 @@ import ( "time" "github.com/containerd/console" - "github.com/containerd/containerd" - "github.com/containerd/containerd/namespaces" "github.com/containerd/containerd/remotes" "github.com/containerd/containerd/remotes/docker" specs "github.com/opencontainers/runtime-spec/specs-go" @@ -26,39 +24,6 @@ import ( "github.com/urfave/cli" ) -// appContext returns the context for a command. Should only be called once per -// command, near the start. -// -// This will ensure the namespace is picked up and set the timeout, if one is -// defined. -func appContext(clicontext *cli.Context) (gocontext.Context, gocontext.CancelFunc) { - var ( - ctx = gocontext.Background() - timeout = clicontext.GlobalDuration("timeout") - namespace = clicontext.GlobalString("namespace") - cancel gocontext.CancelFunc - ) - - ctx = namespaces.WithNamespace(ctx, namespace) - - if timeout > 0 { - ctx, cancel = gocontext.WithTimeout(ctx, timeout) - } else { - ctx, cancel = gocontext.WithCancel(ctx) - } - - return ctx, cancel -} - -func newClient(context *cli.Context) (*containerd.Client, gocontext.Context, gocontext.CancelFunc, error) { - client, err := containerd.New(context.GlobalString("address")) - if err != nil { - return nil, nil, nil, err - } - ctx, cancel := appContext(context) - return client, ctx, cancel, nil -} - func passwordPrompt() (string, error) { c := console.Current() defer c.Reset() diff --git a/cmd/ctr/version.go b/cmd/ctr/version.go index ec2d0ecf9..a937eb65a 100644 --- a/cmd/ctr/version.go +++ b/cmd/ctr/version.go @@ -4,6 +4,7 @@ import ( "fmt" "os" + "github.com/containerd/containerd/cmd/ctr/commands" "github.com/containerd/containerd/version" "github.com/urfave/cli" ) @@ -19,7 +20,7 @@ var versionCommand = cli.Command{ fmt.Printf(" Version: %s\n", version.Version) fmt.Printf(" Revision: %s\n", version.Revision) fmt.Println("") - client, ctx, cancel, err := newClient(context) + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err } From 2dac1b696364f771e7dc70b8499d517188545f9d Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Wed, 25 Oct 2017 11:14:09 -0400 Subject: [PATCH 2/3] Move version command into package Signed-off-by: Michael Crosby --- cmd/ctr/{ => commands/version}/version.go | 13 +++++-------- cmd/ctr/main.go | 3 ++- 2 files changed, 7 insertions(+), 9 deletions(-) rename cmd/ctr/{ => commands/version}/version.go (79%) diff --git a/cmd/ctr/version.go b/cmd/ctr/commands/version/version.go similarity index 79% rename from cmd/ctr/version.go rename to cmd/ctr/commands/version/version.go index a937eb65a..4058d862d 100644 --- a/cmd/ctr/version.go +++ b/cmd/ctr/commands/version/version.go @@ -1,21 +1,19 @@ -package main +package version import ( "fmt" "os" "github.com/containerd/containerd/cmd/ctr/commands" - "github.com/containerd/containerd/version" + "github.com/google/cadvisor/version" "github.com/urfave/cli" ) -var versionCommand = cli.Command{ +// Command is a cli ommand to output the client and containerd server version +var Command = cli.Command{ Name: "version", - Usage: "print the version", + Usage: "print the client and server versions", Action: func(context *cli.Context) error { - if context.NArg() > 0 { - return fmt.Errorf("no argument expected") - } fmt.Println("Client:") fmt.Printf(" Version: %s\n", version.Version) fmt.Printf(" Revision: %s\n", version.Revision) @@ -29,7 +27,6 @@ var versionCommand = cli.Command{ if err != nil { return err } - fmt.Println("Server:") fmt.Printf(" Version: %s\n", v.Version) fmt.Printf(" Revision: %s\n", v.Revision) diff --git a/cmd/ctr/main.go b/cmd/ctr/main.go index 35e8eafb5..e486b119f 100644 --- a/cmd/ctr/main.go +++ b/cmd/ctr/main.go @@ -6,6 +6,7 @@ import ( "log" "os" + versionCmd "github.com/containerd/containerd/cmd/ctr/commands/version" "github.com/containerd/containerd/namespaces" "github.com/containerd/containerd/server" "github.com/containerd/containerd/version" @@ -81,7 +82,7 @@ containerd CLI snapshotCommand, tasksCommand, pluginsCommand, - versionCommand, + versionCmd.Command, }, extraCmds...) app.Before = func(context *cli.Context) error { if context.GlobalBool("debug") { From ae995bc7b370b5867dc9286034da4f943760a1f8 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Wed, 25 Oct 2017 11:16:34 -0400 Subject: [PATCH 3/3] Move plugins command Signed-off-by: Michael Crosby --- cmd/ctr/{ => commands/plugins}/plugins.go | 18 ++++++++---------- cmd/ctr/commands/version/version.go | 2 +- cmd/ctr/main.go | 5 +++-- 3 files changed, 12 insertions(+), 13 deletions(-) rename cmd/ctr/{ => commands/plugins}/plugins.go (90%) diff --git a/cmd/ctr/plugins.go b/cmd/ctr/commands/plugins/plugins.go similarity index 90% rename from cmd/ctr/plugins.go rename to cmd/ctr/commands/plugins/plugins.go index 9c987f799..0fa6eeae6 100644 --- a/cmd/ctr/plugins.go +++ b/cmd/ctr/commands/plugins/plugins.go @@ -1,4 +1,4 @@ -package main +package plugins import ( "fmt" @@ -11,21 +11,22 @@ import ( "github.com/containerd/containerd/api/types" "github.com/containerd/containerd/cmd/ctr/commands" "github.com/containerd/containerd/platforms" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" + "github.com/opencontainers/image-spec/specs-go/v1" "github.com/urfave/cli" "google.golang.org/grpc/codes" ) -var pluginsCommand = cli.Command{ +// Command is a cli command that outputs plugin information +var Command = cli.Command{ Name: "plugins", - Usage: "Provides information about containerd plugins", + Usage: "provides information about containerd plugins", Flags: []cli.Flag{ cli.BoolFlag{ - Name: "quiet, q", + Name: "quiet,q", Usage: "print only the plugin ids", }, cli.BoolFlag{ - Name: "detailed, d", + Name: "detailed,d", Usage: "print detailed information about each plugin", }, }, @@ -52,7 +53,6 @@ var pluginsCommand = cli.Command{ } return nil } - w := tabwriter.NewWriter(os.Stdout, 4, 8, 4, ' ', 0) if detailed { first := true @@ -105,7 +105,6 @@ var pluginsCommand = cli.Command{ if len(plugin.Platforms) > 0 { platformColumn = prettyPlatforms(plugin.Platforms) } - if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\t\n", plugin.Type, plugin.ID, @@ -122,7 +121,7 @@ var pluginsCommand = cli.Command{ func prettyPlatforms(pspb []types.Platform) string { psm := map[string]struct{}{} for _, p := range pspb { - psm[platforms.Format(ocispec.Platform{ + psm[platforms.Format(v1.Platform{ OS: p.OS, Architecture: p.Architecture, Variant: p.Variant, @@ -133,6 +132,5 @@ func prettyPlatforms(pspb []types.Platform) string { ps = append(ps, p) } sort.Stable(sort.StringSlice(ps)) - return strings.Join(ps, ",") } diff --git a/cmd/ctr/commands/version/version.go b/cmd/ctr/commands/version/version.go index 4058d862d..37dd52e02 100644 --- a/cmd/ctr/commands/version/version.go +++ b/cmd/ctr/commands/version/version.go @@ -5,7 +5,7 @@ import ( "os" "github.com/containerd/containerd/cmd/ctr/commands" - "github.com/google/cadvisor/version" + "github.com/containerd/containerd/version" "github.com/urfave/cli" ) diff --git a/cmd/ctr/main.go b/cmd/ctr/main.go index e486b119f..b96f1e92e 100644 --- a/cmd/ctr/main.go +++ b/cmd/ctr/main.go @@ -6,6 +6,7 @@ import ( "log" "os" + "github.com/containerd/containerd/cmd/ctr/commands/plugins" versionCmd "github.com/containerd/containerd/cmd/ctr/commands/version" "github.com/containerd/containerd/namespaces" "github.com/containerd/containerd/server" @@ -65,6 +66,8 @@ containerd CLI }, } app.Commands = append([]cli.Command{ + plugins.Command, + versionCmd.Command, applyCommand, containersCommand, contentCommand, @@ -81,8 +84,6 @@ containerd CLI runCommand, snapshotCommand, tasksCommand, - pluginsCommand, - versionCmd.Command, }, extraCmds...) app.Before = func(context *cli.Context) error { if context.GlobalBool("debug") {