This fix is an extension to last commit to expand the partial
filter to node and task searches.
Additional integration tests have been added to cover the changes.
This fix fixes 24270.
This fix fixes 24112.
Note: A separate pull request will be opened on swarmkit.
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
| ... | ... |
@@ -21,9 +21,9 @@ func newListNodesFilters(filter filters.Args) (*swarmapi.ListNodesRequest_Filter |
| 21 | 21 |
return nil, err |
| 22 | 22 |
} |
| 23 | 23 |
f := &swarmapi.ListNodesRequest_Filters{
|
| 24 |
- Names: filter.Get("name"),
|
|
| 25 |
- IDPrefixes: filter.Get("id"),
|
|
| 26 |
- Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
|
|
| 24 |
+ NamePrefixes: filter.Get("name"),
|
|
| 25 |
+ IDPrefixes: filter.Get("id"),
|
|
| 26 |
+ Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
|
|
| 27 | 27 |
} |
| 28 | 28 |
|
| 29 | 29 |
for _, r := range filter.Get("role") {
|
| ... | ... |
@@ -79,11 +79,11 @@ func newListTasksFilters(filter filters.Args, transformFunc func(filters.Args) e |
| 79 | 79 |
} |
| 80 | 80 |
} |
| 81 | 81 |
f := &swarmapi.ListTasksRequest_Filters{
|
| 82 |
- Names: 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"),
|
|
| 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 | 87 |
} |
| 88 | 88 |
|
| 89 | 89 |
for _, s := range filter.Get("desired-state") {
|
| ... | ... |
@@ -211,3 +211,45 @@ func (s *DockerSwarmSuite) TestSwarmServiceListFilter(c *check.C) {
|
| 211 | 211 |
c.Assert(out, checker.Contains, name2+" ") |
| 212 | 212 |
c.Assert(out, checker.Contains, name3+" ") |
| 213 | 213 |
} |
| 214 |
+ |
|
| 215 |
+func (s *DockerSwarmSuite) TestSwarmNodeListFilter(c *check.C) {
|
|
| 216 |
+ d := s.AddDaemon(c, true, true) |
|
| 217 |
+ |
|
| 218 |
+ out, err := d.Cmd("node", "inspect", "--format", "{{ .Description.Hostname }}", "self")
|
|
| 219 |
+ c.Assert(err, checker.IsNil) |
|
| 220 |
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Equals), "") |
|
| 221 |
+ name := strings.TrimSpace(out) |
|
| 222 |
+ |
|
| 223 |
+ filter := "name=" + name[:4] |
|
| 224 |
+ |
|
| 225 |
+ out, err = d.Cmd("node", "ls", "--filter", filter)
|
|
| 226 |
+ c.Assert(err, checker.IsNil) |
|
| 227 |
+ c.Assert(out, checker.Contains, name) |
|
| 228 |
+ |
|
| 229 |
+ out, err = d.Cmd("node", "ls", "--filter", "name=none")
|
|
| 230 |
+ c.Assert(err, checker.IsNil) |
|
| 231 |
+ c.Assert(out, checker.Not(checker.Contains), name) |
|
| 232 |
+} |
|
| 233 |
+ |
|
| 234 |
+func (s *DockerSwarmSuite) TestSwarmNodeTaskListFilter(c *check.C) {
|
|
| 235 |
+ d := s.AddDaemon(c, true, true) |
|
| 236 |
+ |
|
| 237 |
+ name := "redis-cluster-md5" |
|
| 238 |
+ out, err := d.Cmd("service", "create", "--name", name, "--replicas=3", "busybox", "top")
|
|
| 239 |
+ c.Assert(err, checker.IsNil) |
|
| 240 |
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Equals), "") |
|
| 241 |
+ |
|
| 242 |
+ filter := "name=redis-cluster" |
|
| 243 |
+ |
|
| 244 |
+ out, err = d.Cmd("node", "tasks", "--filter", filter, "self")
|
|
| 245 |
+ c.Assert(err, checker.IsNil) |
|
| 246 |
+ c.Assert(out, checker.Contains, name+".1") |
|
| 247 |
+ c.Assert(out, checker.Contains, name+".2") |
|
| 248 |
+ c.Assert(out, checker.Contains, name+".3") |
|
| 249 |
+ |
|
| 250 |
+ out, err = d.Cmd("node", "tasks", "--filter", "name=none", "self")
|
|
| 251 |
+ c.Assert(err, checker.IsNil) |
|
| 252 |
+ c.Assert(out, checker.Not(checker.Contains), name+".1") |
|
| 253 |
+ c.Assert(out, checker.Not(checker.Contains), name+".2") |
|
| 254 |
+ c.Assert(out, checker.Not(checker.Contains), name+".3") |
|
| 255 |
+} |