mirror of
https://github.com/containers/podman.git
synced 2025-06-19 00:06:43 +08:00
Merge pull request #8431 from mheon/networks_returns_default
Make c.networks() list include the default network
This commit is contained in:
@ -13,6 +13,7 @@ import (
|
||||
"github.com/containers/image/v5/manifest"
|
||||
"github.com/containers/podman/v2/libpod/define"
|
||||
"github.com/containers/podman/v2/libpod/lock"
|
||||
"github.com/containers/podman/v2/pkg/rootless"
|
||||
"github.com/containers/storage"
|
||||
"github.com/cri-o/ocicni/pkg/ocicni"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
@ -1095,13 +1096,17 @@ func (c *Container) Umask() string {
|
||||
// values at runtime via network connect and disconnect.
|
||||
// If the container is configured to use CNI and this function returns an empty
|
||||
// array, the container will still be connected to the default network.
|
||||
func (c *Container) Networks() ([]string, error) {
|
||||
// The second return parameter, a bool, indicates that the container container
|
||||
// is joining the default CNI network - the network name will be included in the
|
||||
// returned array of network names, but the container did not explicitly join
|
||||
// this network.
|
||||
func (c *Container) Networks() ([]string, bool, error) {
|
||||
if !c.batched {
|
||||
c.lock.Lock()
|
||||
defer c.lock.Unlock()
|
||||
|
||||
if err := c.syncContainer(); err != nil {
|
||||
return nil, err
|
||||
return nil, false, err
|
||||
}
|
||||
}
|
||||
|
||||
@ -1109,19 +1114,22 @@ func (c *Container) Networks() ([]string, error) {
|
||||
}
|
||||
|
||||
// Unlocked accessor for networks
|
||||
func (c *Container) networks() ([]string, error) {
|
||||
func (c *Container) networks() ([]string, bool, error) {
|
||||
networks, err := c.runtime.state.GetNetworks(c)
|
||||
if err != nil && errors.Cause(err) == define.ErrNoSuchNetwork {
|
||||
return c.config.Networks, nil
|
||||
if len(c.config.Networks) == 0 && !rootless.IsRootless() {
|
||||
return []string{c.runtime.netPlugin.GetDefaultNetworkName()}, true, nil
|
||||
}
|
||||
return c.config.Networks, false, nil
|
||||
}
|
||||
|
||||
return networks, err
|
||||
return networks, false, err
|
||||
}
|
||||
|
||||
// networksByNameIndex provides us with a map of container networks where key
|
||||
// is network name and value is the index position
|
||||
func (c *Container) networksByNameIndex() (map[string]int, error) {
|
||||
networks, err := c.networks()
|
||||
networks, _, err := c.networks()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -641,18 +641,13 @@ func (c *Container) removeIPv4Allocations() error {
|
||||
cniDefaultNetwork = c.runtime.netPlugin.GetDefaultNetworkName()
|
||||
}
|
||||
|
||||
networks, err := c.networks()
|
||||
networks, _, err := c.networks()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch {
|
||||
case len(networks) > 0 && len(networks) != len(c.state.NetworkStatus):
|
||||
if len(networks) != len(c.state.NetworkStatus) {
|
||||
return errors.Wrapf(define.ErrInternal, "network mismatch: asked to join %d CNI networks but got %d CNI results", len(networks), len(c.state.NetworkStatus))
|
||||
case len(networks) == 0 && len(c.state.NetworkStatus) != 1:
|
||||
return errors.Wrapf(define.ErrInternal, "network mismatch: did not specify CNI networks but joined more than one (%d)", len(c.state.NetworkStatus))
|
||||
case len(networks) == 0 && cniDefaultNetwork == "":
|
||||
return errors.Wrapf(define.ErrInternal, "could not retrieve name of CNI default network")
|
||||
}
|
||||
|
||||
for index, result := range c.state.NetworkStatus {
|
||||
|
@ -110,10 +110,15 @@ func (r *Runtime) configureNetNS(ctr *Container, ctrNS ns.NetNS) ([]*cnitypes.Re
|
||||
|
||||
podName := getCNIPodName(ctr)
|
||||
|
||||
networks, err := ctr.networks()
|
||||
networks, _, err := ctr.networks()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// All networks have been removed from the container.
|
||||
// This is effectively forcing net=none.
|
||||
if len(networks) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Update container map of interface descriptions
|
||||
if err := ctr.setupNetworkDescriptions(networks); err != nil {
|
||||
@ -224,7 +229,7 @@ func (r *Runtime) setupRootlessNetNS(ctr *Container) error {
|
||||
if ctr.config.NetMode.IsSlirp4netns() {
|
||||
return r.setupSlirp4netns(ctr)
|
||||
}
|
||||
networks, err := ctr.networks()
|
||||
networks, _, err := ctr.networks()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -744,13 +749,13 @@ func (r *Runtime) teardownNetNS(ctr *Container) error {
|
||||
|
||||
logrus.Debugf("Tearing down network namespace at %s for container %s", ctr.state.NetNS.Path(), ctr.ID())
|
||||
|
||||
networks, err := ctr.networks()
|
||||
networks, _, err := ctr.networks()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// rootless containers do not use the CNI plugin directly
|
||||
if !rootless.IsRootless() && !ctr.config.NetMode.IsSlirp4netns() {
|
||||
if !rootless.IsRootless() && !ctr.config.NetMode.IsSlirp4netns() && len(networks) > 0 {
|
||||
var requestedIP net.IP
|
||||
if ctr.requestedIP != nil {
|
||||
requestedIP = ctr.requestedIP
|
||||
@ -863,7 +868,7 @@ func (c *Container) getContainerNetworkInfo() (*define.InspectNetworkSettings, e
|
||||
settings := new(define.InspectNetworkSettings)
|
||||
settings.Ports = makeInspectPortBindings(c.config.PortMappings)
|
||||
|
||||
networks, err := c.networks()
|
||||
networks, isDefault, err := c.networks()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -872,7 +877,7 @@ func (c *Container) getContainerNetworkInfo() (*define.InspectNetworkSettings, e
|
||||
if c.state.NetNS == nil {
|
||||
// We still want to make dummy configurations for each CNI net
|
||||
// the container joined.
|
||||
if len(networks) > 0 {
|
||||
if len(networks) > 0 && !isDefault {
|
||||
settings.Networks = make(map[string]*define.InspectAdditionalNetwork, len(networks))
|
||||
for _, net := range networks {
|
||||
cniNet := new(define.InspectAdditionalNetwork)
|
||||
@ -893,7 +898,7 @@ func (c *Container) getContainerNetworkInfo() (*define.InspectNetworkSettings, e
|
||||
}
|
||||
|
||||
// If we have CNI networks - handle that here
|
||||
if len(networks) > 0 {
|
||||
if len(networks) > 0 && !isDefault {
|
||||
if len(networks) != len(c.state.NetworkStatus) {
|
||||
return nil, errors.Wrapf(define.ErrInternal, "network inspection mismatch: asked to join %d CNI networks but have information on %d networks", len(networks), len(c.state.NetworkStatus))
|
||||
}
|
||||
@ -1101,7 +1106,7 @@ func (c *Container) NetworkConnect(nameOrID, netName string, aliases []string) e
|
||||
return err
|
||||
}
|
||||
|
||||
ctrNetworks, err := c.networks()
|
||||
ctrNetworks, _, err := c.networks()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ const (
|
||||
//
|
||||
// AllocRootlessCNI does not lock c. c should be already locked.
|
||||
func AllocRootlessCNI(ctx context.Context, c *Container) (ns.NetNS, []*cnitypes.Result, error) {
|
||||
networks, err := c.networks()
|
||||
networks, _, err := c.networks()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
@ -81,7 +81,7 @@ func AllocRootlessCNI(ctx context.Context, c *Container) (ns.NetNS, []*cnitypes.
|
||||
//
|
||||
// DeallocRootlessCNI does not lock c. c should be already locked.
|
||||
func DeallocRootlessCNI(ctx context.Context, c *Container) error {
|
||||
networks, err := c.networks()
|
||||
networks, _, err := c.networks()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
Reference in New Issue
Block a user