Skip to content

Commit ada5465

Browse files
authored
Merge pull request #17323 from spowelljr/fixNetworkError
Fix network not found not being detected on new Docker versions
2 parents 36316b0 + c1ea47c commit ada5465

File tree

2 files changed

+71
-3
lines changed

2 files changed

+71
-3
lines changed

Diff for: pkg/drivers/kic/oci/network_create.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"fmt"
2424
"net"
2525
"os/exec"
26+
"regexp"
2627
"strings"
2728

2829
"github.com/blang/semver/v4"
@@ -207,8 +208,7 @@ func dockerNetworkInspect(name string) (netInfo, error) {
207208
rr, err := dockerInspectGetter(name)
208209
if err != nil {
209210
logDockerNetworkInspect(Docker, name)
210-
if strings.Contains(rr.Output(), "No such network") {
211-
211+
if isNetworkNotFound(rr.Output()) {
212212
return info, ErrNetworkNotFound
213213
}
214214
return info, err
@@ -293,7 +293,7 @@ func RemoveNetwork(ociBin string, name string) error {
293293
}
294294
rr, err := runCmd(exec.Command(ociBin, "network", "rm", name))
295295
if err != nil {
296-
if strings.Contains(rr.Output(), "No such network") {
296+
if isNetworkNotFound(rr.Output()) {
297297
return ErrNetworkNotFound
298298
}
299299
// Error response from daemon: error while removing network: network mynet123 id f9e1c50b89feb0b8f4b687f3501a81b618252c9907bc20666e386d0928322387 has active endpoints
@@ -347,3 +347,9 @@ func DeleteKICNetworksByLabel(ociBin string, label string) []error {
347347
}
348348
return nil
349349
}
350+
351+
func isNetworkNotFound(output string) bool {
352+
// "No such network" on Docker 20.X.X and before, "network %s not found" on Docker 23.X.X and later
353+
re := regexp.MustCompile(`(No such network)|(network .+ not found)`)
354+
return re.MatchString(output)
355+
}

Diff for: pkg/drivers/kic/oci/network_create_test.go

+62
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,65 @@ func TestPodmanInspect(t *testing.T) {
143143
})
144144
}
145145
}
146+
147+
func TestIsNetworkNotFound(t *testing.T) {
148+
tests := []struct {
149+
output string
150+
isNotFound bool
151+
}{
152+
{"Error: No such network: cat", true},
153+
{"Error response from daemon: network cat not found", true},
154+
{`[
155+
{
156+
"Name": "abcde123",
157+
"Id": "4683c88eb412f2744e9763a4bebcb5e3b73a11dbcc79d6d9ab64ab2f10e08faa",
158+
"Created": "2023-09-29T17:12:11.774716834Z",
159+
"Scope": "local",
160+
"Driver": "bridge",
161+
"EnableIPv6": false,
162+
"IPAM": {
163+
"Driver": "default",
164+
"Options": {},
165+
"Config": [
166+
{
167+
"Subnet": "192.168.49.0/24",
168+
"Gateway": "192.168.49.1"
169+
}
170+
]
171+
},
172+
"Internal": false,
173+
"Attachable": false,
174+
"Ingress": false,
175+
"ConfigFrom": {
176+
"Network": ""
177+
},
178+
"ConfigOnly": false,
179+
"Containers": {
180+
"b6954f226ccfdb7d190e3792be8d569e4bc5e3c44833d9e274835212fca4f4d2": {
181+
"Name": "p2",
182+
"EndpointID": "30fd6525dab2b0a4f1953a3c8cae7485be272e09938dffe3d6de81e84c574826",
183+
"MacAddress": "02:42:c0:a8:31:02",
184+
"IPv4Address": "192.168.49.2/24",
185+
"IPv6Address": ""
186+
}
187+
},
188+
"Options": {
189+
"--icc": "",
190+
"--ip-masq": "",
191+
"com.docker.network.driver.mtu": "65535"
192+
},
193+
"Labels": {
194+
"created_by.minikube.sigs.k8s.io": "true",
195+
"name.minikube.sigs.k8s.io": "minikube"
196+
}
197+
}
198+
]`, false},
199+
}
200+
201+
for _, tc := range tests {
202+
got := isNetworkNotFound(tc.output)
203+
if got != tc.isNotFound {
204+
t.Errorf("isNetworkNotFound(%s) = %t; want = %t", tc.output, got, tc.isNotFound)
205+
}
206+
}
207+
}

0 commit comments

Comments
 (0)