github.com/rhatdan/docker@v0.7.7-0.20180119204836-47a0dcbcd20a/api/server/router/network/filter.go (about) 1 package network 2 3 import ( 4 "github.com/docker/docker/api/types" 5 "github.com/docker/docker/api/types/filters" 6 "github.com/docker/docker/runconfig" 7 ) 8 9 func filterNetworkByType(nws []types.NetworkResource, netType string) ([]types.NetworkResource, error) { 10 retNws := []types.NetworkResource{} 11 switch netType { 12 case "builtin": 13 for _, nw := range nws { 14 if runconfig.IsPreDefinedNetwork(nw.Name) { 15 retNws = append(retNws, nw) 16 } 17 } 18 case "custom": 19 for _, nw := range nws { 20 if !runconfig.IsPreDefinedNetwork(nw.Name) { 21 retNws = append(retNws, nw) 22 } 23 } 24 default: 25 return nil, invalidFilter(netType) 26 } 27 return retNws, nil 28 } 29 30 type invalidFilter string 31 32 func (e invalidFilter) Error() string { 33 return "Invalid filter: 'type'='" + string(e) + "'" 34 } 35 36 func (e invalidFilter) InvalidParameter() {} 37 38 // filterNetworks filters network list according to user specified filter 39 // and returns user chosen networks 40 func filterNetworks(nws []types.NetworkResource, filter filters.Args) ([]types.NetworkResource, error) { 41 // if filter is empty, return original network list 42 if filter.Len() == 0 { 43 return nws, nil 44 } 45 46 displayNet := []types.NetworkResource{} 47 for _, nw := range nws { 48 if filter.Contains("driver") { 49 if !filter.ExactMatch("driver", nw.Driver) { 50 continue 51 } 52 } 53 if filter.Contains("name") { 54 if !filter.Match("name", nw.Name) { 55 continue 56 } 57 } 58 if filter.Contains("id") { 59 if !filter.Match("id", nw.ID) { 60 continue 61 } 62 } 63 if filter.Contains("label") { 64 if !filter.MatchKVList("label", nw.Labels) { 65 continue 66 } 67 } 68 if filter.Contains("scope") { 69 if !filter.ExactMatch("scope", nw.Scope) { 70 continue 71 } 72 } 73 displayNet = append(displayNet, nw) 74 } 75 76 if filter.Contains("type") { 77 typeNet := []types.NetworkResource{} 78 errFilter := filter.WalkValues("type", func(fval string) error { 79 passList, err := filterNetworkByType(displayNet, fval) 80 if err != nil { 81 return err 82 } 83 typeNet = append(typeNet, passList...) 84 return nil 85 }) 86 if errFilter != nil { 87 return nil, errFilter 88 } 89 displayNet = typeNet 90 } 91 92 return displayNet, nil 93 }