|
@@ -8,6 +8,7 @@ import (
|
|
"net"
|
|
"net"
|
|
"strings"
|
|
"strings"
|
|
"text/tabwriter"
|
|
"text/tabwriter"
|
|
|
|
+ "text/template"
|
|
|
|
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/docker/docker/api/types"
|
|
Cli "github.com/docker/docker/cli"
|
|
Cli "github.com/docker/docker/cli"
|
|
@@ -203,14 +204,25 @@ func (cli *DockerCli) CmdNetworkLs(args ...string) error {
|
|
// Usage: docker network inspect [OPTIONS] <NETWORK> [NETWORK...]
|
|
// Usage: docker network inspect [OPTIONS] <NETWORK> [NETWORK...]
|
|
func (cli *DockerCli) CmdNetworkInspect(args ...string) error {
|
|
func (cli *DockerCli) CmdNetworkInspect(args ...string) error {
|
|
cmd := Cli.Subcmd("network inspect", []string{"NETWORK [NETWORK...]"}, "Displays detailed information on one or more networks", false)
|
|
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)
|
|
cmd.Require(flag.Min, 1)
|
|
- err := cmd.ParseFlags(args, true)
|
|
|
|
- if err != nil {
|
|
|
|
|
|
+
|
|
|
|
+ if err := cmd.ParseFlags(args, true); err != nil {
|
|
return err
|
|
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
|
|
status := 0
|
|
- var networks []*types.NetworkResource
|
|
|
|
|
|
+ var networks []types.NetworkResource
|
|
|
|
+ buf := new(bytes.Buffer)
|
|
for _, name := range cmd.Args() {
|
|
for _, name := range cmd.Args() {
|
|
obj, _, err := readBody(cli.call("GET", "/networks/"+name, nil, nil))
|
|
obj, _, err := readBody(cli.call("GET", "/networks/"+name, nil, nil))
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -222,12 +234,34 @@ func (cli *DockerCli) CmdNetworkInspect(args ...string) error {
|
|
status = 1
|
|
status = 1
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
- networkResource := types.NetworkResource{}
|
|
|
|
|
|
+ var networkResource types.NetworkResource
|
|
if err := json.NewDecoder(bytes.NewReader(obj)).Decode(&networkResource); err != nil {
|
|
if err := json.NewDecoder(bytes.NewReader(obj)).Decode(&networkResource); err != nil {
|
|
return err
|
|
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, "", " ")
|
|
b, err := json.MarshalIndent(networks, "", " ")
|