mirror of https://github.com/docker/cli.git
Merge pull request #4168 from thaJeztah/docker_info_json
fix docker info, docker version --format=json not outputting json format
This commit is contained in:
commit
623356001f
|
@ -19,7 +19,7 @@ const (
|
||||||
JSONFormatKey = "json"
|
JSONFormatKey = "json"
|
||||||
|
|
||||||
DefaultQuietFormat = "{{.ID}}"
|
DefaultQuietFormat = "{{.ID}}"
|
||||||
jsonFormat = "{{json .}}"
|
JSONFormat = "{{json .}}"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Format is the format string rendered using the Context
|
// Format is the format string rendered using the Context
|
||||||
|
@ -62,7 +62,7 @@ func (c *Context) preFormat() {
|
||||||
case c.Format.IsTable():
|
case c.Format.IsTable():
|
||||||
c.finalFormat = c.finalFormat[len(TableFormatKey):]
|
c.finalFormat = c.finalFormat[len(TableFormatKey):]
|
||||||
case c.Format.IsJSON():
|
case c.Format.IsJSON():
|
||||||
c.finalFormat = jsonFormat
|
c.finalFormat = JSONFormat
|
||||||
}
|
}
|
||||||
|
|
||||||
c.finalFormat = strings.Trim(c.finalFormat, " ")
|
c.finalFormat = strings.Trim(c.finalFormat, " ")
|
||||||
|
|
|
@ -12,7 +12,9 @@ import (
|
||||||
pluginmanager "github.com/docker/cli/cli-plugins/manager"
|
pluginmanager "github.com/docker/cli/cli-plugins/manager"
|
||||||
"github.com/docker/cli/cli/command"
|
"github.com/docker/cli/cli/command"
|
||||||
"github.com/docker/cli/cli/command/completion"
|
"github.com/docker/cli/cli/command/completion"
|
||||||
|
"github.com/docker/cli/cli/command/formatter"
|
||||||
"github.com/docker/cli/cli/debug"
|
"github.com/docker/cli/cli/debug"
|
||||||
|
flagsHelper "github.com/docker/cli/cli/flags"
|
||||||
"github.com/docker/cli/templates"
|
"github.com/docker/cli/templates"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/swarm"
|
"github.com/docker/docker/api/types/swarm"
|
||||||
|
@ -62,10 +64,7 @@ func NewInfoCommand(dockerCli command.Cli) *cobra.Command {
|
||||||
ValidArgsFunction: completion.NoComplete,
|
ValidArgsFunction: completion.NoComplete,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
cmd.Flags().StringVarP(&opts.format, "format", "f", "", flagsHelper.InspectFormatHelp)
|
||||||
|
|
||||||
flags.StringVarP(&opts.format, "format", "f", "", "Format the output using the given Go template")
|
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -507,6 +506,10 @@ func printServerWarningsLegacy(dockerCli command.Cli, info types.Info) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func formatInfo(dockerCli command.Cli, info info, format string) error {
|
func formatInfo(dockerCli command.Cli, info info, format string) error {
|
||||||
|
if format == formatter.JSONFormatKey {
|
||||||
|
format = formatter.JSONFormat
|
||||||
|
}
|
||||||
|
|
||||||
// Ensure slice/array fields render as `[]` not `null`
|
// Ensure slice/array fields render as `[]` not `null`
|
||||||
if info.ClientInfo != nil && info.ClientInfo.Plugins == nil {
|
if info.ClientInfo != nil && info.ClientInfo.Plugins == nil {
|
||||||
info.ClientInfo.Plugins = make([]pluginmanager.Plugin, 0)
|
info.ClientInfo.Plugins = make([]pluginmanager.Plugin, 0)
|
||||||
|
|
|
@ -396,6 +396,11 @@ func TestPrettyPrintInfo(t *testing.T) {
|
||||||
assert.NilError(t, formatInfo(cli, tc.dockerInfo, "{{json .}}"))
|
assert.NilError(t, formatInfo(cli, tc.dockerInfo, "{{json .}}"))
|
||||||
golden.Assert(t, cli.OutBuffer().String(), tc.jsonGolden+".json.golden")
|
golden.Assert(t, cli.OutBuffer().String(), tc.jsonGolden+".json.golden")
|
||||||
assert.Check(t, is.Equal("", cli.ErrBuffer().String()))
|
assert.Check(t, is.Equal("", cli.ErrBuffer().String()))
|
||||||
|
|
||||||
|
cli = test.NewFakeCli(&fakeClient{})
|
||||||
|
assert.NilError(t, formatInfo(cli, tc.dockerInfo, "json"))
|
||||||
|
golden.Assert(t, cli.OutBuffer().String(), tc.jsonGolden+".json.golden")
|
||||||
|
assert.Check(t, is.Equal("", cli.ErrBuffer().String()))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
{"Client":{"Platform":{"Name":""},"Version":"18.99.5-ce","ApiVersion":"1.38","DefaultAPIVersion":"1.38","GitCommit":"deadbeef","GoVersion":"go1.10.2","Os":"linux","Arch":"amd64","BuildTime":"Wed May 30 22:21:05 2018","Context":"my-context"},"Server":{"Platform":{"Name":"Docker Enterprise Edition (EE) 2.0"},"Components":[{"Name":"Engine","Version":"17.06.2-ee-15","Details":{"ApiVersion":"1.30","Arch":"amd64","BuildTime":"Mon Jul 9 23:38:38 2018","Experimental":"false","GitCommit":"64ddfa6","GoVersion":"go1.8.7","MinAPIVersion":"1.12","Os":"linux"}},{"Name":"Universal Control Plane","Version":"17.06.2-ee-15","Details":{"ApiVersion":"1.30","Arch":"amd64","BuildTime":"Mon Jul 2 21:24:07 UTC 2018","GitCommit":"4513922","GoVersion":"go1.9.4","MinApiVersion":"1.20","Os":"linux","Version":"3.0.3-tp2"}},{"Name":"Kubernetes","Version":"1.8+","Details":{"buildDate":"2018-04-26T16:51:21Z","compiler":"gc","gitCommit":"8d637aedf46b9c21dde723e29c645b9f27106fa5","gitTreeState":"clean","gitVersion":"v1.8.11-docker-8d637ae","goVersion":"go1.8.3","major":"1","minor":"8+","platform":"linux/amd64"}},{"Name":"Calico","Version":"v3.0.8","Details":{"cni":"v2.0.6","kube-controllers":"v2.0.5","node":"v3.0.8"}}],"Version":"","ApiVersion":"","GitCommit":"","GoVersion":"","Os":"","Arch":""}}
|
|
@ -11,7 +11,9 @@ import (
|
||||||
"github.com/docker/cli/cli"
|
"github.com/docker/cli/cli"
|
||||||
"github.com/docker/cli/cli/command"
|
"github.com/docker/cli/cli/command"
|
||||||
"github.com/docker/cli/cli/command/completion"
|
"github.com/docker/cli/cli/command/completion"
|
||||||
|
"github.com/docker/cli/cli/command/formatter"
|
||||||
"github.com/docker/cli/cli/command/formatter/tabwriter"
|
"github.com/docker/cli/cli/command/formatter/tabwriter"
|
||||||
|
flagsHelper "github.com/docker/cli/cli/flags"
|
||||||
"github.com/docker/cli/cli/version"
|
"github.com/docker/cli/cli/version"
|
||||||
"github.com/docker/cli/templates"
|
"github.com/docker/cli/templates"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
|
@ -20,7 +22,7 @@ import (
|
||||||
"github.com/tonistiigi/go-rosetta"
|
"github.com/tonistiigi/go-rosetta"
|
||||||
)
|
)
|
||||||
|
|
||||||
var versionTemplate = `{{with .Client -}}
|
const defaultVersionTemplate = `{{with .Client -}}
|
||||||
Client:{{if ne .Platform.Name ""}} {{.Platform.Name}}{{end}}
|
Client:{{if ne .Platform.Name ""}} {{.Platform.Name}}{{end}}
|
||||||
Version: {{.Version}}
|
Version: {{.Version}}
|
||||||
API version: {{.APIVersion}}{{if ne .APIVersion .DefaultAPIVersion}} (downgraded from {{.DefaultAPIVersion}}){{end}}
|
API version: {{.APIVersion}}{{if ne .APIVersion .DefaultAPIVersion}} (downgraded from {{.DefaultAPIVersion}}){{end}}
|
||||||
|
@ -101,9 +103,7 @@ func NewVersionCommand(dockerCli command.Cli) *cobra.Command {
|
||||||
ValidArgsFunction: completion.NoComplete,
|
ValidArgsFunction: completion.NoComplete,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
cmd.Flags().StringVarP(&opts.format, "format", "f", "", flagsHelper.InspectFormatHelp)
|
||||||
flags.StringVarP(&opts.format, "format", "f", "", "Format the output using the given Go template")
|
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,8 +194,11 @@ func prettyPrintVersion(dockerCli command.Cli, vd versionInfo, tmpl *template.Te
|
||||||
}
|
}
|
||||||
|
|
||||||
func newVersionTemplate(templateFormat string) (*template.Template, error) {
|
func newVersionTemplate(templateFormat string) (*template.Template, error) {
|
||||||
if templateFormat == "" {
|
switch templateFormat {
|
||||||
templateFormat = versionTemplate
|
case "":
|
||||||
|
templateFormat = defaultVersionTemplate
|
||||||
|
case formatter.JSONFormatKey:
|
||||||
|
templateFormat = formatter.JSONFormat
|
||||||
}
|
}
|
||||||
tmpl := templates.New("version").Funcs(template.FuncMap{"getDetailsOrder": getDetailsOrder})
|
tmpl := templates.New("version").Funcs(template.FuncMap{"getDetailsOrder": getDetailsOrder})
|
||||||
tmpl, err := tmpl.Parse(templateFormat)
|
tmpl, err := tmpl.Parse(templateFormat)
|
||||||
|
|
|
@ -6,12 +6,11 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/docker/cli/internal/test"
|
||||||
|
"github.com/docker/docker/api/types"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
is "gotest.tools/v3/assert/cmp"
|
is "gotest.tools/v3/assert/cmp"
|
||||||
"gotest.tools/v3/golden"
|
"gotest.tools/v3/golden"
|
||||||
|
|
||||||
"github.com/docker/cli/internal/test"
|
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestVersionWithoutServer(t *testing.T) {
|
func TestVersionWithoutServer(t *testing.T) {
|
||||||
|
@ -30,7 +29,7 @@ func TestVersionWithoutServer(t *testing.T) {
|
||||||
assert.Assert(t, !strings.Contains(out, "Server:"), "actual: %s", out)
|
assert.Assert(t, !strings.Contains(out, "Server:"), "actual: %s", out)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestVersionAlign(t *testing.T) {
|
func TestVersionFormat(t *testing.T) {
|
||||||
vi := versionInfo{
|
vi := versionInfo{
|
||||||
Client: clientVersion{
|
Client: clientVersion{
|
||||||
Version: "18.99.5-ce",
|
Version: "18.99.5-ce",
|
||||||
|
@ -104,10 +103,28 @@ func TestVersionAlign(t *testing.T) {
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
cli := test.NewFakeCli(&fakeClient{})
|
t.Run("default", func(t *testing.T) {
|
||||||
tmpl, err := newVersionTemplate("")
|
cli := test.NewFakeCli(&fakeClient{})
|
||||||
assert.NilError(t, err)
|
tmpl, err := newVersionTemplate("")
|
||||||
assert.NilError(t, prettyPrintVersion(cli, vi, tmpl))
|
assert.NilError(t, err)
|
||||||
assert.Check(t, golden.String(cli.OutBuffer().String(), "docker-client-version.golden"))
|
assert.NilError(t, prettyPrintVersion(cli, vi, tmpl))
|
||||||
assert.Check(t, is.Equal("", cli.ErrBuffer().String()))
|
assert.Check(t, golden.String(cli.OutBuffer().String(), "docker-client-version.golden"))
|
||||||
|
assert.Check(t, is.Equal("", cli.ErrBuffer().String()))
|
||||||
|
})
|
||||||
|
t.Run("json", func(t *testing.T) {
|
||||||
|
cli := test.NewFakeCli(&fakeClient{})
|
||||||
|
tmpl, err := newVersionTemplate("json")
|
||||||
|
assert.NilError(t, err)
|
||||||
|
assert.NilError(t, prettyPrintVersion(cli, vi, tmpl))
|
||||||
|
assert.Check(t, golden.String(cli.OutBuffer().String(), "docker-client-version.json.golden"))
|
||||||
|
assert.Check(t, is.Equal("", cli.ErrBuffer().String()))
|
||||||
|
})
|
||||||
|
t.Run("json template", func(t *testing.T) {
|
||||||
|
cli := test.NewFakeCli(&fakeClient{})
|
||||||
|
tmpl, err := newVersionTemplate("{{json .}}")
|
||||||
|
assert.NilError(t, err)
|
||||||
|
assert.NilError(t, prettyPrintVersion(cli, vi, tmpl))
|
||||||
|
assert.Check(t, golden.String(cli.OutBuffer().String(), "docker-client-version.json.golden"))
|
||||||
|
assert.Check(t, is.Equal("", cli.ErrBuffer().String()))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,9 +9,9 @@ Display system-wide information
|
||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
| Name | Type | Default | Description |
|
| Name | Type | Default | Description |
|
||||||
|:---------------------------------------|:---------|:--------|:----------------------------------------------|
|
|:---------------------------------------|:---------|:--------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| [`-f`](#format), [`--format`](#format) | `string` | | Format the output using the given Go template |
|
| [`-f`](#format), [`--format`](#format) | `string` | | Format output using a custom template:<br>'json': Print in JSON format<br>'TEMPLATE': Print output using the given Go template.<br>Refer to https://docs.docker.com/go/formatting/ for more information about formatting output with templates |
|
||||||
|
|
||||||
|
|
||||||
<!---MARKER_GEN_END-->
|
<!---MARKER_GEN_END-->
|
||||||
|
|
|
@ -9,9 +9,9 @@ Display system-wide information
|
||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
| Name | Type | Default | Description |
|
| Name | Type | Default | Description |
|
||||||
|:-----------------|:---------|:--------|:----------------------------------------------|
|
|:-----------------|:---------|:--------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| `-f`, `--format` | `string` | | Format the output using the given Go template |
|
| `-f`, `--format` | `string` | | Format output using a custom template:<br>'json': Print in JSON format<br>'TEMPLATE': Print output using the given Go template.<br>Refer to https://docs.docker.com/go/formatting/ for more information about formatting output with templates |
|
||||||
|
|
||||||
|
|
||||||
<!---MARKER_GEN_END-->
|
<!---MARKER_GEN_END-->
|
||||||
|
|
|
@ -5,9 +5,9 @@ Show the Docker version information
|
||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
| Name | Type | Default | Description |
|
| Name | Type | Default | Description |
|
||||||
|:---------------------------------------|:---------|:--------|:----------------------------------------------|
|
|:---------------------------------------|:---------|:--------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| [`-f`](#format), [`--format`](#format) | `string` | | Format the output using the given Go template |
|
| [`-f`](#format), [`--format`](#format) | `string` | | Format output using a custom template:<br>'json': Print in JSON format<br>'TEMPLATE': Print output using the given Go template.<br>Refer to https://docs.docker.com/go/formatting/ for more information about formatting output with templates |
|
||||||
|
|
||||||
|
|
||||||
<!---MARKER_GEN_END-->
|
<!---MARKER_GEN_END-->
|
||||||
|
|
Loading…
Reference in New Issue