Skip to content

Commit 53a206f

Browse files
committed
Add network ls filtering by name.
Turns out that network filter tests were wrongly disabled for master branch. This is also fixed here. Signed-off-by: Nishant Totla <[email protected]>
1 parent 044380e commit 53a206f

File tree

2 files changed

+45
-3
lines changed

2 files changed

+45
-3
lines changed

cluster/network.go

+22-1
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,19 @@ func (networks Networks) Filter(filter filters.Args) Networks {
9292
}
9393
}
9494
}
95+
// substring match based on name filter
96+
for _, idOrName := range append(names, ids...) {
97+
if networkList := networks.matchByName(idOrName, filter); len(networkList) != 0 {
98+
for _, network := range networkList.Uniq() {
99+
if includeFilter(network) {
100+
out = append(out, network)
101+
}
102+
}
103+
}
104+
}
95105
}
96106

97-
return out
107+
return out.Uniq()
98108
}
99109

100110
// RemoveDuplicateEndpoints returns a copy of input network
@@ -125,6 +135,17 @@ func (network *Network) RemoveDuplicateEndpoints() *Network {
125135
return &netCopy
126136
}
127137

138+
// matchByName checks if any networks match by substring
139+
func (networks Networks) matchByName(IDOrName string, filter filters.Args) Networks {
140+
candidates := Networks{}
141+
for _, network := range networks {
142+
if filter.Match("name", network.Name) {
143+
candidates = append(candidates, network)
144+
}
145+
}
146+
return candidates
147+
}
148+
128149
// Get returns a network using its ID or Name
129150
func (networks Networks) Get(IDOrName string) *Network {
130151
// Abort immediately if the name is empty.

test/integration/api/network.bats

+23-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ function teardown() {
1818
@test "docker network ls --filter type" {
1919
# docker network ls --filter type is introduced in docker 1.10, skip older version without --filter type
2020
run docker --version
21-
if [[ "${output}" != "Docker version 1.1"* ]]; then
21+
if [[ "${output}" == "Docker version 1.9"* ]]; then
2222
skip
2323
fi
2424

@@ -46,7 +46,7 @@ function teardown() {
4646
@test "docker network ls --filter node" {
4747
# docker network ls --filter type is introduced in docker 1.10, skip older version without --filter type
4848
run docker --version
49-
if [[ "${output}" != "Docker version 1.1"* ]]; then
49+
if [[ "${output}" == "Docker version 1.9"* ]]; then
5050
skip
5151
fi
5252

@@ -60,6 +60,27 @@ function teardown() {
6060
[ "${#lines[@]}" -eq 4 ]
6161
}
6262

63+
# docker network ls --filter name returns networks that match with a provided name
64+
@test "docker network ls --filter name" {
65+
# don't bother running this for older versions
66+
run docker --version
67+
if [[ "${output}" == "Docker version 1.9"* || "${output}" == "Docker version 1.10"* || "${output}" == "Docker version 1.11"* || "${output}" == "Docker version 1.12"* || "${output}" == "Docker version 1.13"* ]]; then
68+
skip
69+
fi
70+
71+
start_docker 2
72+
swarm_manage
73+
74+
run docker_swarm network create networknameone
75+
run docker_swarm network create networknametwo
76+
77+
run docker_swarm network ls
78+
echo $output
79+
80+
run docker_swarm network ls --filter name=networkname
81+
echo $output
82+
[ "${#lines[@]}" -eq 3 ]
83+
}
6384

6485
@test "docker network inspect" {
6586
# Docker 1.12 client shows "Attachable" and "Created" fields while docker daemon 1.12

0 commit comments

Comments
 (0)