Retrieve IP addresses for container from DB

Instead of execing out to the host's IP, use the IP address we
got back from CNI to populate Inspect's IP address information.

Signed-off-by: Matthew Heon <mheon@redhat.com>

Closes: #680
Approved by: umohnani8
This commit is contained in:
Matthew Heon
2018-04-26 12:20:25 -04:00
committed by Atomic Bot
parent 6ac8a24db4
commit 0ccfd7dc20
2 changed files with 15 additions and 8 deletions

View File

@ -1,6 +1,8 @@
package libpod
import (
"strings"
"github.com/cri-o/ocicni/pkg/ocicni"
"github.com/projectatomic/libpod/pkg/inspect"
"github.com/sirupsen/logrus"
@ -92,7 +94,7 @@ func (c *Container) getContainerInspectData(size bool, driverData *inspect.Data)
Gateway: "", // TODO
GlobalIPv6Addresses: []string{}, // TODO - do we even support IPv6?
GlobalIPv6PrefixLen: 0, // TODO - do we even support IPv6?
IPAddress: "",
IPAddress: nil,
IPPrefixLen: 0, // TODO
IPv6Gateway: "", // TODO - do we even support IPv6?
MacAddress: "", // TODO
@ -106,14 +108,19 @@ func (c *Container) getContainerInspectData(size bool, driverData *inspect.Data)
// Get information on the container's network namespace (if present)
if runtimeInfo.NetNS != nil {
// Get IP address
ip, err := c.runtime.getContainerIP(c)
if err != nil {
logrus.Errorf("error getting container %q IP: %v", config.ID, err)
} else {
data.NetworkSettings.IPAddress = ip.To4().String()
// Go through our IP addresses
ctrIPs := []string{}
for _, ctrIP := range c.state.IPs {
if ctrIP.Version == "4" {
ipWithMask := ctrIP.Address.String()
splitIP := strings.Split(ipWithMask, "/")
ctrIPs = append(ctrIPs, splitIP[0])
}
}
data.NetworkSettings.IPAddress = ctrIPs
// Set network namespace path
data.NetworkSettings.SandboxKey = runtimeInfo.NetNS.Path()
}

View File

@ -199,7 +199,7 @@ type NetworkSettings struct {
Gateway string `json:"Gateway"`
GlobalIPv6Addresses []string `json:"GlobalIPv6Addresses"`
GlobalIPv6PrefixLen int `json:"GlobalIPv6PrefixLen"`
IPAddress string `json:"IPAddress"`
IPAddress []string `json:"IPAddress"`
IPPrefixLen int `json:"IPPrefixLen"`
IPv6Gateway string `json:"IPv6Gateway"`
MacAddress string `json:"MacAddress"`