Browse Source

Merge pull request #46447 from akerouanton/api-predefined-networks

api: Add consts for predefined networks
Sebastiaan van Stijn 1 year ago
parent
commit
ce1ee98aba

+ 3 - 2
api/types/container/hostconfig.go

@@ -6,6 +6,7 @@ import (
 
 
 	"github.com/docker/docker/api/types/blkiodev"
 	"github.com/docker/docker/api/types/blkiodev"
 	"github.com/docker/docker/api/types/mount"
 	"github.com/docker/docker/api/types/mount"
+	"github.com/docker/docker/api/types/network"
 	"github.com/docker/docker/api/types/strslice"
 	"github.com/docker/docker/api/types/strslice"
 	"github.com/docker/go-connections/nat"
 	"github.com/docker/go-connections/nat"
 	units "github.com/docker/go-units"
 	units "github.com/docker/go-units"
@@ -133,12 +134,12 @@ type NetworkMode string
 
 
 // IsNone indicates whether container isn't using a network stack.
 // IsNone indicates whether container isn't using a network stack.
 func (n NetworkMode) IsNone() bool {
 func (n NetworkMode) IsNone() bool {
-	return n == "none"
+	return n == network.NetworkNone
 }
 }
 
 
 // IsDefault indicates whether container uses the default network stack.
 // IsDefault indicates whether container uses the default network stack.
 func (n NetworkMode) IsDefault() bool {
 func (n NetworkMode) IsDefault() bool {
-	return n == "default"
+	return n == network.NetworkDefault
 }
 }
 
 
 // IsPrivate indicates whether container uses its private network stack.
 // IsPrivate indicates whether container uses its private network stack.

+ 8 - 6
api/types/container/hostconfig_unix.go

@@ -2,6 +2,8 @@
 
 
 package container // import "github.com/docker/docker/api/types/container"
 package container // import "github.com/docker/docker/api/types/container"
 
 
+import "github.com/docker/docker/api/types/network"
+
 // IsValid indicates if an isolation technology is valid
 // IsValid indicates if an isolation technology is valid
 func (i Isolation) IsValid() bool {
 func (i Isolation) IsValid() bool {
 	return i.IsDefault()
 	return i.IsDefault()
@@ -10,15 +12,15 @@ func (i Isolation) IsValid() bool {
 // NetworkName returns the name of the network stack.
 // NetworkName returns the name of the network stack.
 func (n NetworkMode) NetworkName() string {
 func (n NetworkMode) NetworkName() string {
 	if n.IsBridge() {
 	if n.IsBridge() {
-		return "bridge"
+		return network.NetworkBridge
 	} else if n.IsHost() {
 	} else if n.IsHost() {
-		return "host"
+		return network.NetworkHost
 	} else if n.IsContainer() {
 	} else if n.IsContainer() {
 		return "container"
 		return "container"
 	} else if n.IsNone() {
 	} else if n.IsNone() {
-		return "none"
+		return network.NetworkNone
 	} else if n.IsDefault() {
 	} else if n.IsDefault() {
-		return "default"
+		return network.NetworkDefault
 	} else if n.IsUserDefined() {
 	} else if n.IsUserDefined() {
 		return n.UserDefined()
 		return n.UserDefined()
 	}
 	}
@@ -27,12 +29,12 @@ func (n NetworkMode) NetworkName() string {
 
 
 // IsBridge indicates whether container uses the bridge network stack
 // IsBridge indicates whether container uses the bridge network stack
 func (n NetworkMode) IsBridge() bool {
 func (n NetworkMode) IsBridge() bool {
-	return n == "bridge"
+	return n == network.NetworkBridge
 }
 }
 
 
 // IsHost indicates whether container uses the host network stack.
 // IsHost indicates whether container uses the host network stack.
 func (n NetworkMode) IsHost() bool {
 func (n NetworkMode) IsHost() bool {
-	return n == "host"
+	return n == network.NetworkHost
 }
 }
 
 
 // IsUserDefined indicates user-created network
 // IsUserDefined indicates user-created network

+ 6 - 4
api/types/container/hostconfig_windows.go

@@ -1,9 +1,11 @@
 package container // import "github.com/docker/docker/api/types/container"
 package container // import "github.com/docker/docker/api/types/container"
 
 
+import "github.com/docker/docker/api/types/network"
+
 // IsBridge indicates whether container uses the bridge network stack
 // IsBridge indicates whether container uses the bridge network stack
 // in windows it is given the name NAT
 // in windows it is given the name NAT
 func (n NetworkMode) IsBridge() bool {
 func (n NetworkMode) IsBridge() bool {
-	return n == "nat"
+	return n == network.NetworkNat
 }
 }
 
 
 // IsHost indicates whether container uses the host network stack.
 // IsHost indicates whether container uses the host network stack.
@@ -25,11 +27,11 @@ func (i Isolation) IsValid() bool {
 // NetworkName returns the name of the network stack.
 // NetworkName returns the name of the network stack.
 func (n NetworkMode) NetworkName() string {
 func (n NetworkMode) NetworkName() string {
 	if n.IsDefault() {
 	if n.IsDefault() {
-		return "default"
+		return network.NetworkDefault
 	} else if n.IsBridge() {
 	} else if n.IsBridge() {
-		return "nat"
+		return network.NetworkNat
 	} else if n.IsNone() {
 	} else if n.IsNone() {
-		return "none"
+		return network.NetworkNone
 	} else if n.IsContainer() {
 	} else if n.IsContainer() {
 		return "container"
 		return "container"
 	} else if n.IsUserDefined() {
 	} else if n.IsUserDefined() {

+ 14 - 0
api/types/network/network.go

@@ -1,8 +1,22 @@
 package network // import "github.com/docker/docker/api/types/network"
 package network // import "github.com/docker/docker/api/types/network"
+
 import (
 import (
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/filters"
 )
 )
 
 
+const (
+	// NetworkDefault is a platform-independent alias to choose the platform-specific default network stack.
+	NetworkDefault = "default"
+	// NetworkHost is the name of the predefined network used when the NetworkMode host is selected (only available on Linux)
+	NetworkHost = "host"
+	// NetworkNone is the name of the predefined network used when the NetworkMode none is selected (available on both Linux and Windows)
+	NetworkNone = "none"
+	// NetworkBridge is the name of the default network on Linux
+	NetworkBridge = "bridge"
+	// NetworkNat is the name of the default network on Windows
+	NetworkNat = "nat"
+)
+
 // Address represents an IP address
 // Address represents an IP address
 type Address struct {
 type Address struct {
 	Addr      string
 	Addr      string

+ 14 - 13
daemon/daemon_unix.go

@@ -23,6 +23,7 @@ import (
 	"github.com/docker/docker/api/types/blkiodev"
 	"github.com/docker/docker/api/types/blkiodev"
 	pblkiodev "github.com/docker/docker/api/types/blkiodev"
 	pblkiodev "github.com/docker/docker/api/types/blkiodev"
 	containertypes "github.com/docker/docker/api/types/container"
 	containertypes "github.com/docker/docker/api/types/container"
+	"github.com/docker/docker/api/types/network"
 	"github.com/docker/docker/container"
 	"github.com/docker/docker/container"
 	"github.com/docker/docker/daemon/config"
 	"github.com/docker/docker/daemon/config"
 	"github.com/docker/docker/daemon/initlayer"
 	"github.com/docker/docker/daemon/initlayer"
@@ -857,24 +858,24 @@ func (daemon *Daemon) initNetworkController(cfg *config.Config, activeSandboxes
 }
 }
 
 
 func configureNetworking(controller *libnetwork.Controller, conf *config.Config) error {
 func configureNetworking(controller *libnetwork.Controller, conf *config.Config) error {
-	// Initialize default network on "null"
-	if n, _ := controller.NetworkByName("none"); n == nil {
-		if _, err := controller.NewNetwork("null", "none", "", libnetwork.NetworkOptionPersist(true)); err != nil {
-			return errors.Wrap(err, `error creating default "null" network`)
+	// Create predefined network "none"
+	if n, _ := controller.NetworkByName(network.NetworkNone); n == nil {
+		if _, err := controller.NewNetwork("null", network.NetworkNone, "", libnetwork.NetworkOptionPersist(true)); err != nil {
+			return errors.Wrapf(err, `error creating default %q network`, network.NetworkNone)
 		}
 		}
 	}
 	}
 
 
-	// Initialize default network on "host"
-	if n, _ := controller.NetworkByName("host"); n == nil {
-		if _, err := controller.NewNetwork("host", "host", "", libnetwork.NetworkOptionPersist(true)); err != nil {
-			return errors.Wrap(err, `error creating default "host" network`)
+	// Create predefined network "host"
+	if n, _ := controller.NetworkByName(network.NetworkHost); n == nil {
+		if _, err := controller.NewNetwork("host", network.NetworkHost, "", libnetwork.NetworkOptionPersist(true)); err != nil {
+			return errors.Wrapf(err, `error creating default %q network`, network.NetworkHost)
 		}
 		}
 	}
 	}
 
 
 	// Clear stale bridge network
 	// Clear stale bridge network
-	if n, err := controller.NetworkByName("bridge"); err == nil {
+	if n, err := controller.NetworkByName(network.NetworkBridge); err == nil {
 		if err = n.Delete(); err != nil {
 		if err = n.Delete(); err != nil {
-			return errors.Wrap(err, `could not delete the default "bridge"" network`)
+			return errors.Wrapf(err, `could not delete the default %q network`, network.NetworkBridge)
 		}
 		}
 		if len(conf.NetworkConfig.DefaultAddressPools.Value()) > 0 && !conf.LiveRestoreEnabled {
 		if len(conf.NetworkConfig.DefaultAddressPools.Value()) > 0 && !conf.LiveRestoreEnabled {
 			removeDefaultBridgeInterface()
 			removeDefaultBridgeInterface()
@@ -898,7 +899,7 @@ func setHostGatewayIP(controller *libnetwork.Controller, config *config.Config)
 	if config.HostGatewayIP != nil {
 	if config.HostGatewayIP != nil {
 		return
 		return
 	}
 	}
-	if n, err := controller.NetworkByName("bridge"); err == nil {
+	if n, err := controller.NetworkByName(network.NetworkBridge); err == nil {
 		v4Info, v6Info := n.IpamInfo()
 		v4Info, v6Info := n.IpamInfo()
 		if len(v4Info) > 0 {
 		if len(v4Info) > 0 {
 			config.HostGatewayIP = v4Info[0].Gateway.IP
 			config.HostGatewayIP = v4Info[0].Gateway.IP
@@ -1051,13 +1052,13 @@ func initBridgeDriver(controller *libnetwork.Controller, cfg config.BridgeConfig
 		v6Conf = append(v6Conf, ipamV6Conf)
 		v6Conf = append(v6Conf, ipamV6Conf)
 	}
 	}
 	// Initialize default network on "bridge" with the same name
 	// Initialize default network on "bridge" with the same name
-	_, err = controller.NewNetwork("bridge", "bridge", "",
+	_, err = controller.NewNetwork("bridge", network.NetworkBridge, "",
 		libnetwork.NetworkOptionEnableIPv6(cfg.EnableIPv6),
 		libnetwork.NetworkOptionEnableIPv6(cfg.EnableIPv6),
 		libnetwork.NetworkOptionDriverOpts(netOption),
 		libnetwork.NetworkOptionDriverOpts(netOption),
 		libnetwork.NetworkOptionIpam("default", "", v4Conf, v6Conf, nil),
 		libnetwork.NetworkOptionIpam("default", "", v4Conf, v6Conf, nil),
 		libnetwork.NetworkOptionDeferIPv6Alloc(deferIPv6Alloc))
 		libnetwork.NetworkOptionDeferIPv6Alloc(deferIPv6Alloc))
 	if err != nil {
 	if err != nil {
-		return fmt.Errorf(`error creating default "bridge" network: %v`, err)
+		return fmt.Errorf(`error creating default %q network: %v`, network.NetworkBridge, err)
 	}
 	}
 	return nil
 	return nil
 }
 }

+ 2 - 1
daemon/daemon_windows.go

@@ -12,6 +12,7 @@ import (
 	"github.com/Microsoft/hcsshim/osversion"
 	"github.com/Microsoft/hcsshim/osversion"
 	"github.com/containerd/log"
 	"github.com/containerd/log"
 	containertypes "github.com/docker/docker/api/types/container"
 	containertypes "github.com/docker/docker/api/types/container"
+	networktypes "github.com/docker/docker/api/types/network"
 	"github.com/docker/docker/container"
 	"github.com/docker/docker/container"
 	"github.com/docker/docker/daemon/config"
 	"github.com/docker/docker/daemon/config"
 	"github.com/docker/docker/libcontainerd/local"
 	"github.com/docker/docker/libcontainerd/local"
@@ -263,7 +264,7 @@ func (daemon *Daemon) initNetworkController(daemonCfg *config.Config, activeSand
 
 
 		if !found {
 		if !found {
 			// non-default nat networks should be re-created if missing from HNS
 			// non-default nat networks should be re-created if missing from HNS
-			if v.Type() == "nat" && v.Name() != "nat" {
+			if v.Type() == "nat" && v.Name() != networktypes.NetworkNat {
 				_, _, v4Conf, v6Conf := v.IpamConfig()
 				_, _, v4Conf, v6Conf := v.IpamConfig()
 				netOption := map[string]string{}
 				netOption := map[string]string{}
 				for k, v := range v.DriverOptions() {
 				for k, v := range v.DriverOptions() {

+ 1 - 1
daemon/inspect.go

@@ -283,7 +283,7 @@ func (daemon *Daemon) getBackwardsCompatibleNetworkSettings(settings *network.Se
 func (daemon *Daemon) getDefaultNetworkSettings(networks map[string]*network.EndpointSettings) types.DefaultNetworkSettings {
 func (daemon *Daemon) getDefaultNetworkSettings(networks map[string]*network.EndpointSettings) types.DefaultNetworkSettings {
 	var settings types.DefaultNetworkSettings
 	var settings types.DefaultNetworkSettings
 
 
-	if defaultNetwork, ok := networks["bridge"]; ok && defaultNetwork.EndpointSettings != nil {
+	if defaultNetwork, ok := networks[networktypes.NetworkBridge]; ok && defaultNetwork.EndpointSettings != nil {
 		settings.EndpointID = defaultNetwork.EndpointID
 		settings.EndpointID = defaultNetwork.EndpointID
 		settings.Gateway = defaultNetwork.Gateway
 		settings.Gateway = defaultNetwork.Gateway
 		settings.GlobalIPv6Address = defaultNetwork.GlobalIPv6Address
 		settings.GlobalIPv6Address = defaultNetwork.GlobalIPv6Address

+ 2 - 1
runconfig/hostconfig.go

@@ -5,6 +5,7 @@ import (
 	"strings"
 	"strings"
 
 
 	"github.com/docker/docker/api/types/container"
 	"github.com/docker/docker/api/types/container"
+	"github.com/docker/docker/api/types/network"
 )
 )
 
 
 // DecodeHostConfig creates a HostConfig based on the specified Reader.
 // DecodeHostConfig creates a HostConfig based on the specified Reader.
@@ -23,7 +24,7 @@ func decodeHostConfig(src io.Reader) (*container.HostConfig, error) {
 // docker daemon.
 // docker daemon.
 func SetDefaultNetModeIfBlank(hc *container.HostConfig) {
 func SetDefaultNetModeIfBlank(hc *container.HostConfig) {
 	if hc != nil && hc.NetworkMode == "" {
 	if hc != nil && hc.NetworkMode == "" {
-		hc.NetworkMode = "default"
+		hc.NetworkMode = network.NetworkDefault
 	}
 	}
 }
 }
 
 

+ 2 - 1
runconfig/hostconfig_unix.go

@@ -7,13 +7,14 @@ import (
 	"runtime"
 	"runtime"
 
 
 	"github.com/docker/docker/api/types/container"
 	"github.com/docker/docker/api/types/container"
+	"github.com/docker/docker/api/types/network"
 	"github.com/docker/docker/pkg/sysinfo"
 	"github.com/docker/docker/pkg/sysinfo"
 )
 )
 
 
 // DefaultDaemonNetworkMode returns the default network stack the daemon should
 // DefaultDaemonNetworkMode returns the default network stack the daemon should
 // use.
 // use.
 func DefaultDaemonNetworkMode() container.NetworkMode {
 func DefaultDaemonNetworkMode() container.NetworkMode {
-	return "bridge"
+	return network.NetworkBridge
 }
 }
 
 
 // IsPreDefinedNetwork indicates if a network is predefined by the daemon
 // IsPreDefinedNetwork indicates if a network is predefined by the daemon

+ 2 - 1
runconfig/hostconfig_windows.go

@@ -4,13 +4,14 @@ import (
 	"fmt"
 	"fmt"
 
 
 	"github.com/docker/docker/api/types/container"
 	"github.com/docker/docker/api/types/container"
+	"github.com/docker/docker/api/types/network"
 	"github.com/docker/docker/pkg/sysinfo"
 	"github.com/docker/docker/pkg/sysinfo"
 )
 )
 
 
 // DefaultDaemonNetworkMode returns the default network stack the daemon should
 // DefaultDaemonNetworkMode returns the default network stack the daemon should
 // use.
 // use.
 func DefaultDaemonNetworkMode() container.NetworkMode {
 func DefaultDaemonNetworkMode() container.NetworkMode {
-	return "nat"
+	return network.NetworkNat
 }
 }
 
 
 // IsPreDefinedNetwork indicates if a network is predefined by the daemon
 // IsPreDefinedNetwork indicates if a network is predefined by the daemon

+ 3 - 2
testutil/environment/clean.go

@@ -9,6 +9,7 @@ import (
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/container"
 	"github.com/docker/docker/api/types/container"
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/filters"
+	"github.com/docker/docker/api/types/network"
 	"github.com/docker/docker/api/types/volume"
 	"github.com/docker/docker/api/types/volume"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/errdefs"
@@ -151,13 +152,13 @@ func deleteAllNetworks(ctx context.Context, t testing.TB, c client.NetworkAPICli
 	assert.Check(t, err, "failed to list networks")
 	assert.Check(t, err, "failed to list networks")
 
 
 	for _, n := range networks {
 	for _, n := range networks {
-		if n.Name == "bridge" || n.Name == "none" || n.Name == "host" {
+		if n.Name == network.NetworkBridge || n.Name == network.NetworkNone || n.Name == network.NetworkHost {
 			continue
 			continue
 		}
 		}
 		if _, ok := protectedNetworks[n.ID]; ok {
 		if _, ok := protectedNetworks[n.ID]; ok {
 			continue
 			continue
 		}
 		}
-		if daemonPlatform == "windows" && strings.ToLower(n.Name) == "nat" {
+		if daemonPlatform == "windows" && strings.ToLower(n.Name) == network.NetworkNat {
 			// nat is a pre-defined network on Windows and cannot be removed
 			// nat is a pre-defined network on Windows and cannot be removed
 			continue
 			continue
 		}
 		}