From fef7f3addc593d1315e1067c1932909cf2e7a5b6 Mon Sep 17 00:00:00 2001 From: Akihiro Suda Date: Tue, 15 Aug 2017 06:24:43 +0000 Subject: [PATCH] ctr: add `ctr snapshot info ` Signed-off-by: Akihiro Suda --- cmd/ctr/info.go | 12 +++--------- cmd/ctr/shim.go | 13 +------------ cmd/ctr/snapshot.go | 31 +++++++++++++++++++++++++++++++ cmd/ctr/utils.go | 8 ++++++++ 4 files changed, 43 insertions(+), 21 deletions(-) diff --git a/cmd/ctr/info.go b/cmd/ctr/info.go index fcbc28e3a..c2a9f9395 100644 --- a/cmd/ctr/info.go +++ b/cmd/ctr/info.go @@ -1,10 +1,6 @@ package main import ( - "encoding/json" - - "fmt" - "github.com/pkg/errors" "github.com/urfave/cli" ) @@ -31,11 +27,9 @@ var containerInfoCommand = cli.Command{ if err != nil { return err } - cjson, err := json.MarshalIndent(container.Info(), "", " ") - if err != nil { - return err - } - fmt.Println(string(cjson)) + + printAsJSON(container.Info()) + return nil }, } diff --git a/cmd/ctr/shim.go b/cmd/ctr/shim.go index 3fbbed179..c5625f35a 100644 --- a/cmd/ctr/shim.go +++ b/cmd/ctr/shim.go @@ -3,12 +3,9 @@ package main import ( - "bytes" - "encoding/json" "fmt" "io/ioutil" "net" - "os" "time" gocontext "context" @@ -185,15 +182,7 @@ var shimStateCommand = cli.Command{ if err != nil { return err } - data, err := json.Marshal(r) - if err != nil { - return err - } - buf := bytes.NewBuffer(nil) - if err := json.Indent(buf, data, " ", " "); err != nil { - return err - } - buf.WriteTo(os.Stdout) + printAsJSON(r) return nil }, } diff --git a/cmd/ctr/snapshot.go b/cmd/ctr/snapshot.go index ad07c4c1e..c48a35a94 100644 --- a/cmd/ctr/snapshot.go +++ b/cmd/ctr/snapshot.go @@ -27,6 +27,7 @@ var snapshotCommand = cli.Command{ treeSnapshotCommand, mountSnapshotCommand, commitSnapshotCommand, + infoSnapshotCommand, }, } @@ -312,6 +313,36 @@ var treeSnapshotCommand = cli.Command{ }, } +var infoSnapshotCommand = cli.Command{ + Name: "info", + Usage: "get info about a snapshot", + ArgsUsage: "", + Action: func(clicontext *cli.Context) error { + ctx, cancel := appContext(clicontext) + defer cancel() + + if clicontext.NArg() != 1 { + return cli.ShowSubcommandHelp(clicontext) + } + + key := clicontext.Args().Get(0) + + snapshotter, err := getSnapshotter(clicontext) + if err != nil { + return err + } + + info, err := snapshotter.Stat(ctx, key) + if err != nil { + return err + } + + printAsJSON(info) + + return nil + }, +} + type snapshotTreeNode struct { Name string Parent string diff --git a/cmd/ctr/utils.go b/cmd/ctr/utils.go index 2f9d99fe9..32e8f3327 100644 --- a/cmd/ctr/utils.go +++ b/cmd/ctr/utils.go @@ -417,3 +417,11 @@ func labelArgs(labelStrings []string) map[string]string { return labels } + +func printAsJSON(x interface{}) { + b, err := json.MarshalIndent(x, "", " ") + if err != nil { + fmt.Fprintf(os.Stderr, "can't marshal %+v as a JSON string: %v\n", x, err) + } + fmt.Println(string(b)) +}