diff --git a/cmd/ctr/inspect.go b/cmd/ctr/inspect.go new file mode 100644 index 0000000..d25e8c1 --- /dev/null +++ b/cmd/ctr/inspect.go @@ -0,0 +1,41 @@ +package main + +import ( + gocontext "context" + "fmt" + + "github.com/davecgh/go-spew/spew" + "github.com/docker/containerd/api/execution" + "github.com/urfave/cli" +) + +var inspectCommand = cli.Command{ + Name: "inspect", + Usage: "inspect a container", + Action: func(context *cli.Context) error { + executionService, err := getExecutionService(context) + if err != nil { + return err + } + id := context.Args().First() + if id == "" { + return fmt.Errorf("container id must be provided") + } + getResponse, err := executionService.Get(gocontext.Background(), + &execution.GetContainerRequest{ID: id}) + if err != nil { + return err + } + listProcResponse, err := executionService.ListProcesses(gocontext.Background(), + &execution.ListProcessesRequest{ID: id}) + if err != nil { + return err + } + dumper := spew.NewDefaultConfig() + dumper.Indent = "\t" + dumper.DisableMethods = true + dumper.DisablePointerAddresses = true + dumper.Dump(getResponse, listProcResponse) + return nil + }, +} diff --git a/cmd/ctr/list.go b/cmd/ctr/list.go new file mode 100644 index 0000000..c61413a --- /dev/null +++ b/cmd/ctr/list.go @@ -0,0 +1,41 @@ +package main + +import ( + gocontext "context" + "fmt" + + "github.com/docker/containerd/api/execution" + "github.com/urfave/cli" +) + +var listCommand = cli.Command{ + Name: "list", + Usage: "list containers", + Action: func(context *cli.Context) error { + executionService, err := getExecutionService(context) + if err != nil { + return err + } + listResponse, err := executionService.List(gocontext.Background(), &execution.ListContainersRequest{ + Owner: []string{}, + }) + if err != nil { + return err + } + fmt.Printf("ID\tSTATUS\tPROCS\tBUNDLE\n") + for _, c := range listResponse.Containers { + listProcResponse, err := executionService.ListProcesses(gocontext.Background(), + &execution.ListProcessesRequest{ID: c.ID}) + if err != nil { + return err + } + fmt.Printf("%s\t%s\t%d\t%s\n", + c.ID, + c.Status, + len(listProcResponse.Processes), + c.BundlePath, + ) + } + return nil + }, +} diff --git a/cmd/ctr/main.go b/cmd/ctr/main.go index 78b5fea..f7d1e0d 100644 --- a/cmd/ctr/main.go +++ b/cmd/ctr/main.go @@ -38,6 +38,8 @@ containerd client execCommand, eventsCommand, deleteCommand, + listCommand, + inspectCommand, } app.Before = func(context *cli.Context) error { if context.GlobalBool("debug") { diff --git a/vendor.conf b/vendor.conf index 9d7970d..18a251b 100644 --- a/vendor.conf +++ b/vendor.conf @@ -43,7 +43,7 @@ github.com/Sirupsen/logrus v0.11.0 github.com/stevvooe/go-btrfs 029908fedf190147f3f673b0db7c836f83a6a6be # testify go testing support; latest release as of 12/16/2016 github.com/stretchr/testify v1.1.4 -# go-spew (required by testify); latest release as of 1/12/2017 +# go-spew (required by testify, and also by ctr); latest release as of 1/12/2017 github.com/davecgh/go-spew v1.1.0 # go-difflib (required by testify); latest release as of 1/12/2017 github.com/pmezard/go-difflib v1.0.0