123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package cluster // import "github.com/docker/docker/daemon/cluster"
- import (
- "fmt"
- "strings"
- "github.com/docker/docker/api/types/filters"
- runconfigopts "github.com/docker/docker/runconfig/opts"
- swarmapi "github.com/moby/swarmkit/v2/api"
- )
- func newListNodesFilters(filter filters.Args) (*swarmapi.ListNodesRequest_Filters, error) {
- accepted := map[string]bool{
- "name": true,
- "id": true,
- "label": true,
- "role": true,
- "membership": true,
- "node.label": true,
- }
- if err := filter.Validate(accepted); err != nil {
- return nil, err
- }
- f := &swarmapi.ListNodesRequest_Filters{
- NamePrefixes: filter.Get("name"),
- IDPrefixes: filter.Get("id"),
- Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
- NodeLabels: runconfigopts.ConvertKVStringsToMap(filter.Get("node.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
- }
- func newListTasksFilters(filter filters.Args, transformFunc func(filters.Args) error) (*swarmapi.ListTasksRequest_Filters, error) {
- accepted := map[string]bool{
- "name": true,
- "id": true,
- "label": true,
- "service": true,
- "node": true,
- "desired-state": true,
- // UpToDate is not meant to be exposed to users. It's for
- // internal use in checking create/update progress. Therefore,
- // we prefix it with a '_'.
- "_up-to-date": true,
- "runtime": true,
- }
- if err := filter.Validate(accepted); err != nil {
- return nil, err
- }
- if transformFunc != nil {
- if err := transformFunc(filter); err != nil {
- return nil, err
- }
- }
- f := &swarmapi.ListTasksRequest_Filters{
- NamePrefixes: filter.Get("name"),
- IDPrefixes: filter.Get("id"),
- Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
- ServiceIDs: filter.Get("service"),
- NodeIDs: filter.Get("node"),
- UpToDate: len(filter.Get("_up-to-date")) != 0,
- Runtimes: filter.Get("runtime"),
- }
- 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 newListSecretsFilters(filter filters.Args) (*swarmapi.ListSecretsRequest_Filters, error) {
- accepted := map[string]bool{
- "names": true,
- "name": true,
- "id": true,
- "label": true,
- }
- if err := filter.Validate(accepted); err != nil {
- return nil, err
- }
- return &swarmapi.ListSecretsRequest_Filters{
- Names: filter.Get("names"),
- NamePrefixes: filter.Get("name"),
- IDPrefixes: filter.Get("id"),
- Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
- }, nil
- }
- func newListConfigsFilters(filter filters.Args) (*swarmapi.ListConfigsRequest_Filters, error) {
- accepted := map[string]bool{
- "name": true,
- "id": true,
- "label": true,
- }
- if err := filter.Validate(accepted); err != nil {
- return nil, err
- }
- return &swarmapi.ListConfigsRequest_Filters{
- NamePrefixes: filter.Get("name"),
- IDPrefixes: filter.Get("id"),
- Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
- }, nil
- }
|