github.com/lazyboychen7/engine@v17.12.1-ce-rc2+incompatible/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 newListTasksFilters(filter filters.Args, transformFunc func(filters.Args) error) (*swarmapi.ListTasksRequest_Filters, error) { 49 accepted := map[string]bool{ 50 "name": true, 51 "id": true, 52 "label": true, 53 "service": true, 54 "node": true, 55 "desired-state": true, 56 // UpToDate is not meant to be exposed to users. It's for 57 // internal use in checking create/update progress. Therefore, 58 // we prefix it with a '_'. 59 "_up-to-date": true, 60 "runtime": true, 61 } 62 if err := filter.Validate(accepted); err != nil { 63 return nil, err 64 } 65 if transformFunc != nil { 66 if err := transformFunc(filter); err != nil { 67 return nil, err 68 } 69 } 70 f := &swarmapi.ListTasksRequest_Filters{ 71 NamePrefixes: filter.Get("name"), 72 IDPrefixes: filter.Get("id"), 73 Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")), 74 ServiceIDs: filter.Get("service"), 75 NodeIDs: filter.Get("node"), 76 UpToDate: len(filter.Get("_up-to-date")) != 0, 77 Runtimes: filter.Get("runtime"), 78 } 79 80 for _, s := range filter.Get("desired-state") { 81 if state, ok := swarmapi.TaskState_value[strings.ToUpper(s)]; ok { 82 f.DesiredStates = append(f.DesiredStates, swarmapi.TaskState(state)) 83 } else if s != "" { 84 return nil, fmt.Errorf("Invalid desired-state filter: '%s'", s) 85 } 86 } 87 88 return f, nil 89 } 90 91 func newListSecretsFilters(filter filters.Args) (*swarmapi.ListSecretsRequest_Filters, error) { 92 accepted := map[string]bool{ 93 "names": true, 94 "name": true, 95 "id": true, 96 "label": true, 97 } 98 if err := filter.Validate(accepted); err != nil { 99 return nil, err 100 } 101 return &swarmapi.ListSecretsRequest_Filters{ 102 Names: filter.Get("names"), 103 NamePrefixes: filter.Get("name"), 104 IDPrefixes: filter.Get("id"), 105 Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")), 106 }, nil 107 } 108 109 func newListConfigsFilters(filter filters.Args) (*swarmapi.ListConfigsRequest_Filters, error) { 110 accepted := map[string]bool{ 111 "name": true, 112 "id": true, 113 "label": true, 114 } 115 if err := filter.Validate(accepted); err != nil { 116 return nil, err 117 } 118 return &swarmapi.ListConfigsRequest_Filters{ 119 NamePrefixes: filter.Get("name"), 120 IDPrefixes: filter.Get("id"), 121 Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")), 122 }, nil 123 }