github.com/jen20/docker@v1.13.1/daemon/cluster/filters.go (about) 1 package cluster 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/docker/docker/api/types/filters" 8 runconfigopts "github.com/docker/docker/runconfig/opts" 9 swarmapi "github.com/docker/swarmkit/api" 10 ) 11 12 func newListNodesFilters(filter filters.Args) (*swarmapi.ListNodesRequest_Filters, error) { 13 accepted := map[string]bool{ 14 "name": true, 15 "id": true, 16 "label": true, 17 "role": true, 18 "membership": true, 19 } 20 if err := filter.Validate(accepted); err != nil { 21 return nil, err 22 } 23 f := &swarmapi.ListNodesRequest_Filters{ 24 NamePrefixes: filter.Get("name"), 25 IDPrefixes: filter.Get("id"), 26 Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")), 27 } 28 29 for _, r := range filter.Get("role") { 30 if role, ok := swarmapi.NodeRole_value[strings.ToUpper(r)]; ok { 31 f.Roles = append(f.Roles, swarmapi.NodeRole(role)) 32 } else if r != "" { 33 return nil, fmt.Errorf("Invalid role filter: '%s'", r) 34 } 35 } 36 37 for _, a := range filter.Get("membership") { 38 if membership, ok := swarmapi.NodeSpec_Membership_value[strings.ToUpper(a)]; ok { 39 f.Memberships = append(f.Memberships, swarmapi.NodeSpec_Membership(membership)) 40 } else if a != "" { 41 return nil, fmt.Errorf("Invalid membership filter: '%s'", a) 42 } 43 } 44 45 return f, nil 46 } 47 48 func newListServicesFilters(filter filters.Args) (*swarmapi.ListServicesRequest_Filters, error) { 49 accepted := map[string]bool{ 50 "name": true, 51 "id": true, 52 "label": true, 53 } 54 if err := filter.Validate(accepted); err != nil { 55 return nil, err 56 } 57 return &swarmapi.ListServicesRequest_Filters{ 58 NamePrefixes: filter.Get("name"), 59 IDPrefixes: filter.Get("id"), 60 Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")), 61 }, nil 62 } 63 64 func newListTasksFilters(filter filters.Args, transformFunc func(filters.Args) error) (*swarmapi.ListTasksRequest_Filters, error) { 65 accepted := map[string]bool{ 66 "name": true, 67 "id": true, 68 "label": true, 69 "service": true, 70 "node": true, 71 "desired-state": true, 72 } 73 if err := filter.Validate(accepted); err != nil { 74 return nil, err 75 } 76 if transformFunc != nil { 77 if err := transformFunc(filter); err != nil { 78 return nil, err 79 } 80 } 81 f := &swarmapi.ListTasksRequest_Filters{ 82 NamePrefixes: filter.Get("name"), 83 IDPrefixes: filter.Get("id"), 84 Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")), 85 ServiceIDs: filter.Get("service"), 86 NodeIDs: filter.Get("node"), 87 } 88 89 for _, s := range filter.Get("desired-state") { 90 if state, ok := swarmapi.TaskState_value[strings.ToUpper(s)]; ok { 91 f.DesiredStates = append(f.DesiredStates, swarmapi.TaskState(state)) 92 } else if s != "" { 93 return nil, fmt.Errorf("Invalid desired-state filter: '%s'", s) 94 } 95 } 96 97 return f, nil 98 } 99 100 func newListSecretsFilters(filter filters.Args) (*swarmapi.ListSecretsRequest_Filters, error) { 101 accepted := map[string]bool{ 102 "names": true, 103 "name": true, 104 "id": true, 105 "label": true, 106 } 107 if err := filter.Validate(accepted); err != nil { 108 return nil, err 109 } 110 return &swarmapi.ListSecretsRequest_Filters{ 111 Names: filter.Get("names"), 112 NamePrefixes: filter.Get("name"), 113 IDPrefixes: filter.Get("id"), 114 Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")), 115 }, nil 116 }