Add format flag to network inspect

…for consistency as docker inspect and docker volume inspect supports it too

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
This commit is contained in:
Vincent Demeester 2015-12-02 22:32:10 +01:00
parent a600bf4eab
commit 295c27388d
6 changed files with 78 additions and 9 deletions

View File

@ -8,6 +8,7 @@ import (
"net"
"strings"
"text/tabwriter"
"text/template"
"github.com/docker/docker/api/types"
Cli "github.com/docker/docker/cli"
@ -203,14 +204,25 @@ func (cli *DockerCli) CmdNetworkLs(args ...string) error {
// Usage: docker network inspect [OPTIONS] <NETWORK> [NETWORK...]
func (cli *DockerCli) CmdNetworkInspect(args ...string) error {
cmd := Cli.Subcmd("network inspect", []string{"NETWORK [NETWORK...]"}, "Displays detailed information on one or more networks", false)
tmplStr := cmd.String([]string{"f", "-format"}, "", "Format the output using the given go template")
cmd.Require(flag.Min, 1)
err := cmd.ParseFlags(args, true)
if err != nil {
if err := cmd.ParseFlags(args, true); err != nil {
return err
}
var tmpl *template.Template
if *tmplStr != "" {
var err error
tmpl, err = template.New("").Funcs(funcMap).Parse(*tmplStr)
if err != nil {
return err
}
}
status := 0
var networks []*types.NetworkResource
var networks []types.NetworkResource
buf := new(bytes.Buffer)
for _, name := range cmd.Args() {
obj, _, err := readBody(cli.call("GET", "/networks/"+name, nil, nil))
if err != nil {
@ -222,12 +234,34 @@ func (cli *DockerCli) CmdNetworkInspect(args ...string) error {
status = 1
continue
}
networkResource := types.NetworkResource{}
var networkResource types.NetworkResource
if err := json.NewDecoder(bytes.NewReader(obj)).Decode(&networkResource); err != nil {
return err
}
networks = append(networks, &networkResource)
if tmpl == nil {
networks = append(networks, networkResource)
continue
}
if err := tmpl.Execute(buf, &networkResource); err != nil {
if err := tmpl.Execute(buf, &networkResource); err != nil {
fmt.Fprintf(cli.err, "%s\n", err)
return Cli.StatusError{StatusCode: 1}
}
}
buf.WriteString("\n")
}
if tmpl != nil {
if _, err := io.Copy(cli.out, buf); err != nil {
return err
}
return nil
}
if len(networks) == 0 {
io.WriteString(cli.out, "[]")
}
b, err := json.MarshalIndent(networks, "", " ")

View File

@ -1133,9 +1133,15 @@ _docker_network_disconnect() {
}
_docker_network_inspect() {
case "$prev" in
--format|-f)
return
;;
esac
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) )
;;
*)
__docker_networks

View File

@ -309,9 +309,10 @@ __docker_network_subcommand() {
"($help)*"{-o=,--opt=}"[Set driver specific options]:key=value: " \
"($help -)1:Network Name: " && ret=0
;;
(inspect|rm)
(inspect)
_arguments $(__docker_arguments) \
$opts_help \
"($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \
"($help -)*:network:__docker_networks" && ret=0
;;
(ls)
@ -320,6 +321,11 @@ __docker_network_subcommand() {
"($help)--no-trunc[Do not truncate the output]" \
"($help -q --quiet)"{-q,--quiet}"[Only display numeric IDs]" && ret=0
;;
(rm)
_arguments $(__docker_arguments) \
$opts_help \
"($help -)*:network:__docker_networks" && ret=0
;;
(help)
_arguments $(__docker_arguments) ":subcommand:__docker_network_commands" && ret=0
;;

View File

@ -14,6 +14,7 @@ parent = "smn_cli"
Displays detailed information on a network
-f, --format= Format the output using the given go template.
--help=false Print usage
Returns information about one or more networks. By default, this command renders all results in a JSON object. For example, if you connect two containers to a network:
@ -26,7 +27,11 @@ $ sudo docker run -itd --name=container2 busybox
bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727
```
The `network inspect` command shows the containers, by id, in its results.
The `network inspect` command shows the containers, by id, in its
results. You can specify an alternate format to execute a given
template for each result. Go's
[text/template](http://golang.org/pkg/text/template/) package describes all the
details of the format.
```bash
$ sudo docker network inspect bridge

View File

@ -293,6 +293,17 @@ func (s *DockerSuite) TestDockerNetworkDeleteMultiple(c *check.C) {
assertNwIsAvailable(c, "testDelMulti2")
}
func (s *DockerSuite) TestDockerNetworkInspect(c *check.C) {
out, _ := dockerCmd(c, "network", "inspect", "host")
networkResources := []types.NetworkResource{}
err := json.Unmarshal([]byte(out), &networkResources)
c.Assert(err, check.IsNil)
c.Assert(networkResources, checker.HasLen, 1)
out, _ = dockerCmd(c, "network", "inspect", "--format='{{ .Name }}'", "host")
c.Assert(strings.TrimSpace(out), check.Equals, "host")
}
func (s *DockerSuite) TestDockerInspectMultipleNetwork(c *check.C) {
out, _ := dockerCmd(c, "network", "inspect", "host", "none")
networkResources := []types.NetworkResource{}

View File

@ -6,6 +6,7 @@ docker-network-inspect - inspect a network
# SYNOPSIS
**docker network inspect**
[**-f**|**--format**[=*FORMAT*]]
[**--help**]
NETWORK [NETWORK...]
@ -21,7 +22,11 @@ $ sudo docker run -itd --name=container2 busybox
bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727
```
The `network inspect` command shows the containers, by id, in its results.
The `network inspect` command shows the containers, by id, in its
results. You can specify an alternate format to execute a given
template for each result. Go's
[text/template](http://golang.org/pkg/text/template/) package
describes all the details of the format.
```bash
$ sudo docker network inspect bridge
@ -50,6 +55,8 @@ $ sudo docker network inspect bridge
# OPTIONS
**-f**, **--format**=""
Format the output using the given go template.
**--help**
Print usage statement