Skip to content

Commit

Permalink
Fix podman network inspect format and error
Browse files Browse the repository at this point in the history
Somehow this ended up with the docker network inspect format,
instead of the CNI based one used by podman network inspect ?

Also add a check for when trying to name the cluster "podman",
which runs into trouble (same as docker driver with name "bridge")
  • Loading branch information
afbjorklund committed Dec 5, 2020
1 parent b2e6f21 commit 5461a8a
Showing 1 changed file with 21 additions and 2 deletions.
23 changes: 21 additions & 2 deletions pkg/drivers/kic/oci/network_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,30 @@ const firstSubnetAddr = "192.168.49.0"
const defaultSubnetMask = 24

// name of the default bridge network, used to lookup the MTU (see #9528)
const defaultBridgeName = "bridge"
const dockerDefaultBridge = "bridge"

// name of the default bridge network
const podmanDefaultBridge = "podman"

// CreateNetwork creates a network returns gateway and error, minikube creates one network per cluster
func CreateNetwork(ociBin string, name string) (net.IP, error) {
return createDockerNetwork(ociBin, name)
}

func createDockerNetwork(ociBin string, clusterName string) (net.IP, error) {
var defaultBridgeName string
if ociBin == Docker {
defaultBridgeName = dockerDefaultBridge
}
if ociBin == Podman {
defaultBridgeName = podmanDefaultBridge
}

// validate the name of the new network
if clusterName == defaultBridgeName {
return nil, errors.Errorf("Can't use same name as %s's default network: %s", ociBin, clusterName)
}

// check if the network already exists
info, err := containerNetworkInspect(ociBin, clusterName)
if err == nil {
Expand Down Expand Up @@ -124,6 +140,9 @@ func tryCreateDockerNetwork(ociBin string, subnetAddr string, subnetMask int, mt
if strings.Contains(rr.Output(), "failed to allocate gateway") && strings.Contains(rr.Output(), "Address already in use") {
return nil, ErrNetworkGatewayTaken
}
if strings.Contains(rr.Output(), "is being used by a network interface") {
return nil, ErrNetworkGatewayTaken
}
return nil, errors.Wrapf(err, "create network %s", fmt.Sprintf("%s %s/%d", name, subnetAddr, subnetMask))
}
return gateway, nil
Expand Down Expand Up @@ -191,7 +210,7 @@ func dockerNetworkInspect(name string) (netInfo, error) {

func podmanNetworkInspect(name string) (netInfo, error) {
var info = netInfo{name: name}
cmd := exec.Command(Podman, "network", "inspect", name, "--format", `{{(index .IPAM.Config 0).Subnet}},{{(index .IPAM.Config 0).Gateway}}`)
cmd := exec.Command(Podman, "network", "inspect", name, "--format", `{{range .plugins}}{{if eq .type "bridge"}}{{(index (index .ipam.ranges 0) 0).subnet}},{{(index (index .ipam.ranges 0) 0).gateway}}{{end}}{{end}}`)
rr, err := runCmd(cmd)
if err != nil {
logDockerNetworkInspect(Podman, name)
Expand Down

0 comments on commit 5461a8a

Please sign in to comment.