Tizen_4.0 base
[platform/upstream/docker-engine.git] / vendor / github.com / docker / cli / cli / command / network / list.go
1 package network
2
3 import (
4         "sort"
5
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"
13 )
14
15 type byNetworkName []types.NetworkResource
16
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 }
20
21 type listOptions struct {
22         quiet   bool
23         noTrunc bool
24         format  string
25         filter  opts.FilterOpt
26 }
27
28 func newListCommand(dockerCli *command.DockerCli) *cobra.Command {
29         options := listOptions{filter: opts.NewFilterOpt()}
30
31         cmd := &cobra.Command{
32                 Use:     "ls [OPTIONS]",
33                 Aliases: []string{"list"},
34                 Short:   "List networks",
35                 Args:    cli.NoArgs,
36                 RunE: func(cmd *cobra.Command, args []string) error {
37                         return runList(dockerCli, options)
38                 },
39         }
40
41         flags := cmd.Flags()
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')")
46
47         return cmd
48 }
49
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)
54         if err != nil {
55                 return err
56         }
57
58         format := options.format
59         if len(format) == 0 {
60                 if len(dockerCli.ConfigFile().NetworksFormat) > 0 && !options.quiet {
61                         format = dockerCli.ConfigFile().NetworksFormat
62                 } else {
63                         format = formatter.TableFormatKey
64                 }
65         }
66
67         sort.Sort(byNetworkName(networkResources))
68
69         networksCtx := formatter.Context{
70                 Output: dockerCli.Out(),
71                 Format: formatter.NewNetworkFormat(format, options.quiet),
72                 Trunc:  !options.noTrunc,
73         }
74         return formatter.NetworkWrite(networksCtx, networkResources)
75 }