runtimes/docker/network: only read ipam config if exists

- fixes #576
  - IPAM config is empty for e.g. the "host" network
This commit is contained in:
iwilltry42 2021-04-30 14:29:00 +02:00
parent 5383ba3f6f
commit b4c910b729
No known key found for this signature in database
GPG Key ID: 7BA57AD1CFF16110

View File

@ -74,6 +74,13 @@ func (d Docker) GetNetwork(ctx context.Context, searchNet *k3d.ClusterNetwork) (
return nil, runtimeErr.ErrRuntimeNetworkNotExists return nil, runtimeErr.ErrRuntimeNetworkNotExists
} }
network := &k3d.ClusterNetwork{
Name: networkList[0].Name,
ID: networkList[0].ID,
}
// for networks that have an IPAM config, we inspect that as well (e.g. "host" network doesn't have it)
if len(networkList[0].IPAM.Config) > 0 {
prefix, err := netaddr.ParseIPPrefix(networkList[0].IPAM.Config[0].Subnet) prefix, err := netaddr.ParseIPPrefix(networkList[0].IPAM.Config[0].Subnet)
if err != nil { if err != nil {
return nil, err return nil, err
@ -84,15 +91,11 @@ func (d Docker) GetNetwork(ctx context.Context, searchNet *k3d.ClusterNetwork) (
return nil, err return nil, err
} }
network := &k3d.ClusterNetwork{ network.IPAM = k3d.IPAM{
Name: networkList[0].Name,
ID: networkList[0].ID,
IPAM: k3d.IPAM{
IPPrefix: prefix, IPPrefix: prefix,
IPsUsed: []netaddr.IP{ IPsUsed: []netaddr.IP{
gateway, gateway,
}, },
},
} }
for _, container := range networkList[0].Containers { for _, container := range networkList[0].Containers {
@ -111,6 +114,9 @@ func (d Docker) GetNetwork(ctx context.Context, searchNet *k3d.ClusterNetwork) (
for _, used := range searchNet.IPAM.IPsUsed { for _, used := range searchNet.IPAM.IPsUsed {
network.IPAM.IPsUsed = append(network.IPAM.IPsUsed, used) network.IPAM.IPsUsed = append(network.IPAM.IPsUsed, used)
} }
} else {
log.Debugf("Network %s does not have an IPAM config", network.Name)
}
// Only one Network allowed, but some functions don't care about this, so they can ignore the error and just use the first one returned // Only one Network allowed, but some functions don't care about this, so they can ignore the error and just use the first one returned
if len(networkList) > 1 { if len(networkList) > 1 {