github.com/brahmaroutu/docker@v1.2.1-0.20160809185609-eb28dde01f16/api/client/network/list.go (about) 1 package network 2 3 import ( 4 "sort" 5 6 "golang.org/x/net/context" 7 8 "github.com/docker/docker/api/client" 9 "github.com/docker/docker/api/client/formatter" 10 "github.com/docker/docker/cli" 11 "github.com/docker/engine-api/types" 12 "github.com/docker/engine-api/types/filters" 13 "github.com/spf13/cobra" 14 ) 15 16 type byNetworkName []types.NetworkResource 17 18 func (r byNetworkName) Len() int { return len(r) } 19 func (r byNetworkName) Swap(i, j int) { r[i], r[j] = r[j], r[i] } 20 func (r byNetworkName) Less(i, j int) bool { return r[i].Name < r[j].Name } 21 22 type listOptions struct { 23 quiet bool 24 noTrunc bool 25 format string 26 filter []string 27 } 28 29 func newListCommand(dockerCli *client.DockerCli) *cobra.Command { 30 var opts listOptions 31 32 cmd := &cobra.Command{ 33 Use: "ls [OPTIONS]", 34 Aliases: []string{"list"}, 35 Short: "List networks", 36 Args: cli.NoArgs, 37 RunE: func(cmd *cobra.Command, args []string) error { 38 return runList(dockerCli, opts) 39 }, 40 } 41 42 flags := cmd.Flags() 43 flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Only display volume names") 44 flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Do not truncate the output") 45 flags.StringVar(&opts.format, "format", "", "Pretty-print networks using a Go template") 46 flags.StringSliceVarP(&opts.filter, "filter", "f", []string{}, "Provide filter values (i.e. 'dangling=true')") 47 48 return cmd 49 } 50 51 func runList(dockerCli *client.DockerCli, opts listOptions) error { 52 client := dockerCli.Client() 53 54 netFilterArgs := filters.NewArgs() 55 for _, f := range opts.filter { 56 var err error 57 netFilterArgs, err = filters.ParseFlag(f, netFilterArgs) 58 if err != nil { 59 return err 60 } 61 } 62 63 options := types.NetworkListOptions{ 64 Filters: netFilterArgs, 65 } 66 67 networkResources, err := client.NetworkList(context.Background(), options) 68 if err != nil { 69 return err 70 } 71 72 f := opts.format 73 if len(f) == 0 { 74 if len(dockerCli.ConfigFile().NetworksFormat) > 0 && !opts.quiet { 75 f = dockerCli.ConfigFile().NetworksFormat 76 } else { 77 f = "table" 78 } 79 } 80 81 sort.Sort(byNetworkName(networkResources)) 82 83 networksCtx := formatter.NetworkContext{ 84 Context: formatter.Context{ 85 Output: dockerCli.Out(), 86 Format: f, 87 Quiet: opts.quiet, 88 Trunc: !opts.noTrunc, 89 }, 90 Networks: networkResources, 91 } 92 93 networksCtx.Write() 94 95 return nil 96 }