Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Vincent Demeester authored on 2017/02/28 19:11:55... | ... |
@@ -333,49 +333,13 @@ func (daemon *Daemon) foldFilter(config *types.ContainerListOptions) (*listConte |
333 | 333 |
} |
334 | 334 |
|
335 | 335 |
publishFilter := map[nat.Port]bool{} |
336 |
- err = psFilters.WalkValues("publish", func(value string) error { |
|
337 |
- if strings.Contains(value, ":") { |
|
338 |
- return fmt.Errorf("filter for 'publish' should not contain ':': %v", value) |
|
339 |
- } |
|
340 |
- //support two formats, original format <portnum>/[<proto>] or <startport-endport>/[<proto>] |
|
341 |
- proto, port := nat.SplitProtoPort(value) |
|
342 |
- start, end, err := nat.ParsePortRange(port) |
|
343 |
- if err != nil { |
|
344 |
- return fmt.Errorf("error while looking up for publish %v: %s", value, err) |
|
345 |
- } |
|
346 |
- for i := start; i <= end; i++ { |
|
347 |
- p, err := nat.NewPort(proto, strconv.FormatUint(i, 10)) |
|
348 |
- if err != nil { |
|
349 |
- return fmt.Errorf("error while looking up for publish %v: %s", value, err) |
|
350 |
- } |
|
351 |
- publishFilter[p] = true |
|
352 |
- } |
|
353 |
- return nil |
|
354 |
- }) |
|
336 |
+ err = psFilters.WalkValues("publish", portOp("publish", publishFilter)) |
|
355 | 337 |
if err != nil { |
356 | 338 |
return nil, err |
357 | 339 |
} |
358 | 340 |
|
359 | 341 |
exposeFilter := map[nat.Port]bool{} |
360 |
- err = psFilters.WalkValues("expose", func(value string) error { |
|
361 |
- if strings.Contains(value, ":") { |
|
362 |
- return fmt.Errorf("filter for 'expose' should not contain ':': %v", value) |
|
363 |
- } |
|
364 |
- //support two formats, original format <portnum>/[<proto>] or <startport-endport>/[<proto>] |
|
365 |
- proto, port := nat.SplitProtoPort(value) |
|
366 |
- start, end, err := nat.ParsePortRange(port) |
|
367 |
- if err != nil { |
|
368 |
- return fmt.Errorf("error while looking up for 'expose' %v: %s", value, err) |
|
369 |
- } |
|
370 |
- for i := start; i <= end; i++ { |
|
371 |
- p, err := nat.NewPort(proto, strconv.FormatUint(i, 10)) |
|
372 |
- if err != nil { |
|
373 |
- return fmt.Errorf("error while looking up for 'expose' %v: %s", value, err) |
|
374 |
- } |
|
375 |
- exposeFilter[p] = true |
|
376 |
- } |
|
377 |
- return nil |
|
378 |
- }) |
|
342 |
+ err = psFilters.WalkValues("expose", portOp("expose", exposeFilter)) |
|
379 | 343 |
if err != nil { |
380 | 344 |
return nil, err |
381 | 345 |
} |
... | ... |
@@ -395,6 +359,27 @@ func (daemon *Daemon) foldFilter(config *types.ContainerListOptions) (*listConte |
395 | 395 |
names: daemon.nameIndex.GetAll(), |
396 | 396 |
}, nil |
397 | 397 |
} |
398 |
+func portOp(key string, filter map[nat.Port]bool) func(value string) error { |
|
399 |
+ return func(value string) error { |
|
400 |
+ if strings.Contains(value, ":") { |
|
401 |
+ return fmt.Errorf("filter for '%s' should not contain ':': %s", key, value) |
|
402 |
+ } |
|
403 |
+ //support two formats, original format <portnum>/[<proto>] or <startport-endport>/[<proto>] |
|
404 |
+ proto, port := nat.SplitProtoPort(value) |
|
405 |
+ start, end, err := nat.ParsePortRange(port) |
|
406 |
+ if err != nil { |
|
407 |
+ return fmt.Errorf("error while looking up for %s %s: %s", key, value, err) |
|
408 |
+ } |
|
409 |
+ for i := start; i <= end; i++ { |
|
410 |
+ p, err := nat.NewPort(proto, strconv.FormatUint(i, 10)) |
|
411 |
+ if err != nil { |
|
412 |
+ return fmt.Errorf("error while looking up for %s %s: %s", key, value, err) |
|
413 |
+ } |
|
414 |
+ filter[p] = true |
|
415 |
+ } |
|
416 |
+ return nil |
|
417 |
+ } |
|
418 |
+} |
|
398 | 419 |
|
399 | 420 |
// includeContainerInList decides whether a container should be included in the output or not based in the filter. |
400 | 421 |
// It also decides if the iteration should be stopped or not. |