// FilterNetworks returns a list of networks filtered by the given arguments. // It returns an error if the filters are not included in the list of accepted filters. func (daemon *Daemon) FilterNetworks(netFilters filters.Args) ([]libnetwork.Network, error) { if netFilters.Len() != 0 { if err := netFilters.Validate(netsettings.AcceptedFilters); err != nil { return nil, err } } nwList := daemon.getAllNetworks() return netsettings.FilterNetworks(nwList, netFilters) }
// VolumeList returns the volumes configured in the docker host. func (cli *Client) VolumeList(ctx context.Context, filter filters.Args) (types.VolumesListResponse, error) { var volumes types.VolumesListResponse query := url.Values{} if filter.Len() > 0 { filterJSON, err := filters.ToParam(filter) if err != nil { return volumes, err } query.Set("filters", filterJSON) } resp, err := cli.get(ctx, "/volumes", query, nil) if err != nil { return volumes, err } err = json.NewDecoder(resp.body).Decode(&volumes) ensureReaderClosed(resp) return volumes, err }
// 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 fkey, fhandler := range supportedFilters { errFilter := filter.WalkValues(fkey, func(fval string) error { passList, err := fhandler(nws, fval) if err != nil { return err } displayNet = append(displayNet, passList...) return nil }) if errFilter != nil { return nil, errFilter } } return displayNet, nil }
func newListServicesFilters(filter filters.Args) (*swarmapi.ListServicesRequest_Filters, error) { accepted := map[string]bool{ "name": true, "id": true, "label": true, } if err := filter.Validate(accepted); err != nil { return nil, err } return &swarmapi.ListServicesRequest_Filters{ Names: filter.Get("name"), IDPrefixes: filter.Get("id"), Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")), }, nil }
func newListTasksFilters(filter filters.Args) (*swarmapi.ListTasksRequest_Filters, error) { accepted := map[string]bool{ "name": true, "id": true, "label": true, "service": true, "node": true, "desired_state": true, } if err := filter.Validate(accepted); err != nil { return nil, err } f := &swarmapi.ListTasksRequest_Filters{ Names: filter.Get("name"), IDPrefixes: filter.Get("id"), Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")), ServiceIDs: filter.Get("service"), NodeIDs: filter.Get("node"), } for _, s := range filter.Get("desired_state") { if state, ok := swarmapi.TaskState_value[strings.ToUpper(s)]; ok { f.DesiredStates = append(f.DesiredStates, swarmapi.TaskState(state)) } else if s != "" { return nil, fmt.Errorf("Invalid desired_state filter: '%s'", s) } } return f, nil }
func newListNodesFilters(filter filters.Args) (*swarmapi.ListNodesRequest_Filters, error) { accepted := map[string]bool{ "name": true, "id": true, "label": true, "role": true, "membership": true, } if err := filter.Validate(accepted); err != nil { return nil, err } f := &swarmapi.ListNodesRequest_Filters{ Names: filter.Get("name"), IDPrefixes: filter.Get("id"), Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")), } for _, r := range filter.Get("role") { if role, ok := swarmapi.NodeRole_value[strings.ToUpper(r)]; ok { f.Roles = append(f.Roles, swarmapi.NodeRole(role)) } else if r != "" { return nil, fmt.Errorf("Invalid role filter: '%s'", r) } } for _, a := range filter.Get("membership") { if membership, ok := swarmapi.NodeSpec_Membership_value[strings.ToUpper(a)]; ok { f.Memberships = append(f.Memberships, swarmapi.NodeSpec_Membership(membership)) } else if a != "" { return nil, fmt.Errorf("Invalid membership filter: '%s'", a) } } return f, nil }
// filterVolumes filters volume list according to user specified filter // and returns user chosen volumes func (daemon *Daemon) filterVolumes(vols []volume.Volume, filter filters.Args) ([]volume.Volume, error) { // if filter is empty, return original volume list if filter.Len() == 0 { return vols, nil } var retVols []volume.Volume for _, vol := range vols { if filter.Include("name") { if !filter.Match("name", vol.Name()) { continue } } if filter.Include("driver") { if !filter.Match("driver", vol.DriverName()) { continue } } retVols = append(retVols, vol) } danglingOnly := false if filter.Include("dangling") { if filter.ExactMatch("dangling", "true") || filter.ExactMatch("dangling", "1") { danglingOnly = true } else if !filter.ExactMatch("dangling", "false") && !filter.ExactMatch("dangling", "0") { return nil, fmt.Errorf("Invalid filter 'dangling=%s'", filter.Get("dangling")) } retVols = daemon.volumes.FilterByUsed(retVols, !danglingOnly) } return retVols, 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 }
// filterNetworks filters network list according to user specified filter // and returns user chosen networks func filterNetworks(nws []types.NetworkResource, filter filters.Args) ([]types.NetworkResource, error) { // if filter is empty, return original network list if filter.Len() == 0 { return nws, nil } if err := filter.Validate(AcceptedFilters); err != nil { return nil, err } var displayNet []types.NetworkResource for _, nw := range nws { if filter.Include("driver") { if !filter.ExactMatch("driver", nw.Driver) { 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.Labels) { continue } } displayNet = append(displayNet, nw) } if filter.Include("type") { var typeNet []types.NetworkResource 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 }