|
@@ -1,94 +0,0 @@
|
|
|
-package network
|
|
|
-
|
|
|
-import (
|
|
|
- "fmt"
|
|
|
-
|
|
|
- "github.com/docker/docker/runconfig"
|
|
|
- "github.com/docker/engine-api/types/filters"
|
|
|
- "github.com/docker/libnetwork"
|
|
|
-)
|
|
|
-
|
|
|
-type filterHandler func([]libnetwork.Network, string) ([]libnetwork.Network, error)
|
|
|
-
|
|
|
-var (
|
|
|
- // AcceptedFilters is an acceptable filters for validation
|
|
|
- AcceptedFilters = map[string]bool{
|
|
|
- "driver": true,
|
|
|
- "type": true,
|
|
|
- "name": true,
|
|
|
- "id": true,
|
|
|
- "label": true,
|
|
|
- }
|
|
|
-)
|
|
|
-
|
|
|
-func filterNetworkByType(nws []libnetwork.Network, netType string) (retNws []libnetwork.Network, err error) {
|
|
|
- switch netType {
|
|
|
- case "builtin":
|
|
|
- for _, nw := range nws {
|
|
|
- if runconfig.IsPreDefinedNetwork(nw.Name()) {
|
|
|
- retNws = append(retNws, nw)
|
|
|
- }
|
|
|
- }
|
|
|
- case "custom":
|
|
|
- for _, nw := range nws {
|
|
|
- if !runconfig.IsPreDefinedNetwork(nw.Name()) {
|
|
|
- retNws = append(retNws, nw)
|
|
|
- }
|
|
|
- }
|
|
|
- default:
|
|
|
- return nil, fmt.Errorf("Invalid filter: 'type'='%s'", netType)
|
|
|
- }
|
|
|
- return retNws, nil
|
|
|
-}
|
|
|
-
|
|
|
-// FilterNetworks filters network list according to user specified filter
|
|
|
-// and returns user chosen networks
|
|
|
-func FilterNetworks(nws []libnetwork.Network, filter filters.Args) ([]libnetwork.Network, error) {
|
|
|
- // if filter is empty, return original network list
|
|
|
- if filter.Len() == 0 {
|
|
|
- return nws, nil
|
|
|
- }
|
|
|
-
|
|
|
- var displayNet []libnetwork.Network
|
|
|
- for _, nw := range nws {
|
|
|
- if filter.Include("driver") {
|
|
|
- if !filter.ExactMatch("driver", nw.Type()) {
|
|
|
- continue
|
|
|
- }
|
|
|
- }
|
|
|
- if filter.Include("name") {
|
|
|
- if !filter.Match("name", nw.Name()) {
|
|
|
- continue
|
|
|
- }
|
|
|
- }
|
|
|
- if filter.Include("id") {
|
|
|
- if !filter.Match("id", nw.ID()) {
|
|
|
- continue
|
|
|
- }
|
|
|
- }
|
|
|
- if filter.Include("label") {
|
|
|
- if !filter.MatchKVList("label", nw.Info().Labels()) {
|
|
|
- continue
|
|
|
- }
|
|
|
- }
|
|
|
- displayNet = append(displayNet, nw)
|
|
|
- }
|
|
|
-
|
|
|
- if filter.Include("type") {
|
|
|
- var typeNet []libnetwork.Network
|
|
|
- errFilter := filter.WalkValues("type", func(fval string) error {
|
|
|
- passList, err := filterNetworkByType(displayNet, fval)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- typeNet = append(typeNet, passList...)
|
|
|
- return nil
|
|
|
- })
|
|
|
- if errFilter != nil {
|
|
|
- return nil, errFilter
|
|
|
- }
|
|
|
- displayNet = typeNet
|
|
|
- }
|
|
|
-
|
|
|
- return displayNet, nil
|
|
|
-}
|