github.com/kobeld/docker@v1.12.0-rc1/daemon/cluster/filters.go (about) 1 package cluster 2 3 import ( 4 "fmt" 5 "strings" 6 7 runconfigopts "github.com/docker/docker/runconfig/opts" 8 "github.com/docker/engine-api/types/filters" 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 Names: 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 Names: 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) (*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 f := &swarmapi.ListTasksRequest_Filters{ 77 Names: filter.Get("name"), 78 IDPrefixes: filter.Get("id"), 79 Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")), 80 ServiceIDs: filter.Get("service"), 81 NodeIDs: filter.Get("node"), 82 } 83 84 for _, s := range filter.Get("desired_state") { 85 if state, ok := swarmapi.TaskState_value[strings.ToUpper(s)]; ok { 86 f.DesiredStates = append(f.DesiredStates, swarmapi.TaskState(state)) 87 } else if s != "" { 88 return nil, fmt.Errorf("Invalid desired_state filter: '%s'", s) 89 } 90 } 91 92 return f, nil 93 }