github.com/portworx/docker@v1.12.1/api/client/network/list.go (about) 1 package network 2 3 import ( 4 "fmt" 5 "sort" 6 "text/tabwriter" 7 8 "golang.org/x/net/context" 9 10 "github.com/docker/docker/api/client" 11 "github.com/docker/docker/cli" 12 "github.com/docker/docker/pkg/stringid" 13 "github.com/docker/engine-api/types" 14 "github.com/docker/engine-api/types/filters" 15 "github.com/spf13/cobra" 16 ) 17 18 type byNetworkName []types.NetworkResource 19 20 func (r byNetworkName) Len() int { return len(r) } 21 func (r byNetworkName) Swap(i, j int) { r[i], r[j] = r[j], r[i] } 22 func (r byNetworkName) Less(i, j int) bool { return r[i].Name < r[j].Name } 23 24 type listOptions struct { 25 quiet bool 26 noTrunc bool 27 filter []string 28 } 29 30 func newListCommand(dockerCli *client.DockerCli) *cobra.Command { 31 var opts listOptions 32 33 cmd := &cobra.Command{ 34 Use: "ls [OPTIONS]", 35 Aliases: []string{"list"}, 36 Short: "List networks", 37 Args: cli.NoArgs, 38 RunE: func(cmd *cobra.Command, args []string) error { 39 return runList(dockerCli, opts) 40 }, 41 } 42 43 flags := cmd.Flags() 44 flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Only display volume names") 45 flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Do not truncate the output") 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 w := tabwriter.NewWriter(dockerCli.Out(), 20, 1, 3, ' ', 0) 73 if !opts.quiet { 74 fmt.Fprintf(w, "NETWORK ID\tNAME\tDRIVER\tSCOPE") 75 fmt.Fprintf(w, "\n") 76 } 77 78 sort.Sort(byNetworkName(networkResources)) 79 for _, networkResource := range networkResources { 80 ID := networkResource.ID 81 netName := networkResource.Name 82 driver := networkResource.Driver 83 scope := networkResource.Scope 84 if !opts.noTrunc { 85 ID = stringid.TruncateID(ID) 86 } 87 if opts.quiet { 88 fmt.Fprintln(w, ID) 89 continue 90 } 91 fmt.Fprintf(w, "%s\t%s\t%s\t%s\t", 92 ID, 93 netName, 94 driver, 95 scope) 96 fmt.Fprint(w, "\n") 97 } 98 w.Flush() 99 return nil 100 }