6 "github.com/docker/cli/cli"
7 "github.com/docker/cli/cli/command"
8 "github.com/docker/cli/cli/command/formatter"
9 "github.com/docker/cli/opts"
10 "github.com/docker/docker/api/types"
11 "github.com/spf13/cobra"
12 "golang.org/x/net/context"
15 type byNetworkName []types.NetworkResource
17 func (r byNetworkName) Len() int { return len(r) }
18 func (r byNetworkName) Swap(i, j int) { r[i], r[j] = r[j], r[i] }
19 func (r byNetworkName) Less(i, j int) bool { return r[i].Name < r[j].Name }
21 type listOptions struct {
28 func newListCommand(dockerCli *command.DockerCli) *cobra.Command {
29 options := listOptions{filter: opts.NewFilterOpt()}
31 cmd := &cobra.Command{
33 Aliases: []string{"list"},
34 Short: "List networks",
36 RunE: func(cmd *cobra.Command, args []string) error {
37 return runList(dockerCli, options)
42 flags.BoolVarP(&options.quiet, "quiet", "q", false, "Only display network IDs")
43 flags.BoolVar(&options.noTrunc, "no-trunc", false, "Do not truncate the output")
44 flags.StringVar(&options.format, "format", "", "Pretty-print networks using a Go template")
45 flags.VarP(&options.filter, "filter", "f", "Provide filter values (e.g. 'driver=bridge')")
50 func runList(dockerCli *command.DockerCli, options listOptions) error {
51 client := dockerCli.Client()
52 listOptions := types.NetworkListOptions{Filters: options.filter.Value()}
53 networkResources, err := client.NetworkList(context.Background(), listOptions)
58 format := options.format
60 if len(dockerCli.ConfigFile().NetworksFormat) > 0 && !options.quiet {
61 format = dockerCli.ConfigFile().NetworksFormat
63 format = formatter.TableFormatKey
67 sort.Sort(byNetworkName(networkResources))
69 networksCtx := formatter.Context{
70 Output: dockerCli.Out(),
71 Format: formatter.NewNetworkFormat(format, options.quiet),
72 Trunc: !options.noTrunc,
74 return formatter.NetworkWrite(networksCtx, networkResources)