Merge pull request #23808 from AkihiroSuda/formatinfo
add `--format` flag to `docker info`
This commit is contained in:
commit
348f6529b7
7 changed files with 81 additions and 7 deletions
|
@ -11,32 +11,50 @@ import (
|
|||
"github.com/docker/docker/cli"
|
||||
"github.com/docker/docker/pkg/ioutils"
|
||||
"github.com/docker/docker/utils"
|
||||
"github.com/docker/docker/utils/templates"
|
||||
"github.com/docker/engine-api/types"
|
||||
"github.com/docker/engine-api/types/swarm"
|
||||
"github.com/docker/go-units"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
type infoOptions struct {
|
||||
format string
|
||||
}
|
||||
|
||||
// NewInfoCommand creates a new cobra.Command for `docker info`
|
||||
func NewInfoCommand(dockerCli *client.DockerCli) *cobra.Command {
|
||||
var opts infoOptions
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Use: "info",
|
||||
Short: "Display system-wide information",
|
||||
Args: cli.NoArgs,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
return runInfo(dockerCli)
|
||||
return runInfo(dockerCli, &opts)
|
||||
},
|
||||
}
|
||||
return cmd
|
||||
|
||||
flags := cmd.Flags()
|
||||
|
||||
flags.StringVarP(&opts.format, "format", "f", "", "Format the output using the given go template")
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
||||
func runInfo(dockerCli *client.DockerCli) error {
|
||||
func runInfo(dockerCli *client.DockerCli, opts *infoOptions) error {
|
||||
ctx := context.Background()
|
||||
info, err := dockerCli.Client().Info(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if opts.format == "" {
|
||||
return prettyPrintInfo(dockerCli, info)
|
||||
}
|
||||
return formatInfo(dockerCli, info, opts.format)
|
||||
}
|
||||
|
||||
func prettyPrintInfo(dockerCli *client.DockerCli, info types.Info) error {
|
||||
fmt.Fprintf(dockerCli.Out(), "Containers: %d\n", info.Containers)
|
||||
fmt.Fprintf(dockerCli.Out(), " Running: %d\n", info.ContainersRunning)
|
||||
fmt.Fprintf(dockerCli.Out(), " Paused: %d\n", info.ContainersPaused)
|
||||
|
@ -223,3 +241,14 @@ func runInfo(dockerCli *client.DockerCli) error {
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
func formatInfo(dockerCli *client.DockerCli, info types.Info, format string) error {
|
||||
tmpl, err := templates.Parse(format)
|
||||
if err != nil {
|
||||
return cli.StatusError{StatusCode: 64,
|
||||
Status: "Template parsing error: " + err.Error()}
|
||||
}
|
||||
err = tmpl.Execute(dockerCli.Out(), info)
|
||||
dockerCli.Out().Write([]byte{'\n'})
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -1290,9 +1290,15 @@ _docker_import() {
|
|||
}
|
||||
|
||||
_docker_info() {
|
||||
case "$prev" in
|
||||
--format|-f)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
||||
COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) )
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
|
|
@ -200,6 +200,8 @@ complete -c docker -A -f -n '__fish_seen_subcommand_from import' -l help -d 'Pri
|
|||
|
||||
# info
|
||||
complete -c docker -f -n '__fish_docker_no_subcommand' -a info -d 'Display system-wide information'
|
||||
complete -c docker -A -f -n '__fish_seen_subcommand_from info' -s f -l format -d 'Format the output using the given go template'
|
||||
complete -c docker -A -f -n '__fish_seen_subcommand_from info' -l help -d 'Print usage'
|
||||
|
||||
# inspect
|
||||
complete -c docker -f -n '__fish_docker_no_subcommand' -a inspect -d 'Return low-level information on a container or image'
|
||||
|
@ -393,6 +395,8 @@ complete -c docker -A -f -n '__fish_seen_subcommand_from unpause' -a '(__fish_pr
|
|||
|
||||
# version
|
||||
complete -c docker -f -n '__fish_docker_no_subcommand' -a version -d 'Show the Docker version information'
|
||||
complete -c docker -A -f -n '__fish_seen_subcommand_from version' -s f -l format -d 'Format the output using the given go template'
|
||||
complete -c docker -A -f -n '__fish_seen_subcommand_from version' -l help -d 'Print usage'
|
||||
|
||||
# wait
|
||||
complete -c docker -f -n '__fish_docker_no_subcommand' -a wait -d 'Block until a container stops, then print its exit code'
|
||||
|
|
|
@ -1709,7 +1709,8 @@ __docker_subcommand() {
|
|||
;;
|
||||
(info|version)
|
||||
_arguments $(__docker_arguments) \
|
||||
$opts_help && ret=0
|
||||
$opts_help \
|
||||
"($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " && ret=0
|
||||
;;
|
||||
(inspect)
|
||||
local state
|
||||
|
|
|
@ -16,7 +16,8 @@ Usage: docker info
|
|||
Display system-wide information
|
||||
|
||||
Options:
|
||||
--help Print usage
|
||||
-f, --format string Format the output using the given go template
|
||||
--help Print usage
|
||||
```
|
||||
|
||||
This command displays system wide information regarding the Docker installation.
|
||||
|
@ -24,6 +25,10 @@ Information displayed includes the kernel version, number of containers and imag
|
|||
The number of images shown is the number of unique images. The same image tagged
|
||||
under different names is counted only once.
|
||||
|
||||
If a format is specified, the given template will be executed instead of the
|
||||
default format. Go's [text/template](http://golang.org/pkg/text/template/) package
|
||||
describes all the details of the format.
|
||||
|
||||
Depending on the storage driver in use, additional information can be shown, such
|
||||
as pool name, data file, metadata file, data space used, total data space, metadata
|
||||
space used, and total metadata space.
|
||||
|
@ -144,3 +149,8 @@ information about the devicemapper storage driver is shown:
|
|||
Insecure registries:
|
||||
myinsecurehost:5000
|
||||
127.0.0.0/8
|
||||
|
||||
You can also specify the output format:
|
||||
|
||||
$ docker info --format '{{json .}}'
|
||||
{"ID":"I54V:OLXT:HVMM:TPKO:JPHQ:CQCD:JNLC:O3BZ:4ZVJ:43XJ:PFHZ:6N2S","Containers":14, ...}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net"
|
||||
"strings"
|
||||
|
@ -49,6 +50,17 @@ func (s *DockerSuite) TestInfoEnsureSucceeds(c *check.C) {
|
|||
}
|
||||
}
|
||||
|
||||
// TestInfoFormat tests `docker info --format`
|
||||
func (s *DockerSuite) TestInfoFormat(c *check.C) {
|
||||
out, status := dockerCmd(c, "info", "--format", "{{json .}}")
|
||||
c.Assert(status, checker.Equals, 0)
|
||||
var m map[string]interface{}
|
||||
err := json.Unmarshal([]byte(out), &m)
|
||||
c.Assert(err, checker.IsNil)
|
||||
_, _, err = dockerCmdWithError("info", "--format", "{{.badString}}")
|
||||
c.Assert(err, checker.NotNil)
|
||||
}
|
||||
|
||||
// TestInfoDiscoveryBackend verifies that a daemon run with `--cluster-advertise` and
|
||||
// `--cluster-store` properly show the backend's endpoint in info output.
|
||||
func (s *DockerSuite) TestInfoDiscoveryBackend(c *check.C) {
|
||||
|
|
|
@ -7,7 +7,7 @@ docker-info - Display system-wide information
|
|||
# SYNOPSIS
|
||||
**docker info**
|
||||
[**--help**]
|
||||
|
||||
[**-f**|**--format**[=*FORMAT*]]
|
||||
|
||||
# DESCRIPTION
|
||||
This command displays system wide information regarding the Docker installation.
|
||||
|
@ -15,6 +15,10 @@ Information displayed includes the kernel version, number of containers and imag
|
|||
The number of images shown is the number of unique images. The same image tagged
|
||||
under different names is counted only once.
|
||||
|
||||
If a format is specified, the given template will be executed instead of the
|
||||
default format. Go's **text/template** package
|
||||
describes all the details of the format.
|
||||
|
||||
Depending on the storage driver in use, additional information can be shown, such
|
||||
as pool name, data file, metadata file, data space used, total data space, metadata
|
||||
space used, and total metadata space.
|
||||
|
@ -28,6 +32,9 @@ available on the volume where `/var/lib/docker` is mounted.
|
|||
**--help**
|
||||
Print usage statement
|
||||
|
||||
**-f**, **--format**=""
|
||||
Format the output using the given go template
|
||||
|
||||
# EXAMPLES
|
||||
|
||||
## Display Docker system information
|
||||
|
@ -140,6 +147,11 @@ information about the devicemapper storage driver is shown:
|
|||
myinsecurehost:5000
|
||||
127.0.0.0/8
|
||||
|
||||
You can also specify the output format:
|
||||
|
||||
$ docker info --format '{{json .}}'
|
||||
{"ID":"I54V:OLXT:HVMM:TPKO:JPHQ:CQCD:JNLC:O3BZ:4ZVJ:43XJ:PFHZ:6N2S","Containers":14, ...}
|
||||
|
||||
# HISTORY
|
||||
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
|
||||
based on docker.com source material and internal work.
|
||||
|
|
Loading…
Reference in a new issue