mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Move ErrUnsupportedNetwork* checks to updateNetworkConfig() func
Signed-off-by: Alessandro Boch <aboch@docker.com>
This commit is contained in:
parent
e91c8a9aa0
commit
56a982afb0
3 changed files with 31 additions and 16 deletions
|
@ -658,6 +658,9 @@ func hasUserDefinedIPAddress(epConfig *networktypes.EndpointSettings) bool {
|
||||||
|
|
||||||
// User specified ip address is acceptable only for networks with user specified subnets.
|
// User specified ip address is acceptable only for networks with user specified subnets.
|
||||||
func validateNetworkingConfig(n libnetwork.Network, epConfig *networktypes.EndpointSettings) error {
|
func validateNetworkingConfig(n libnetwork.Network, epConfig *networktypes.EndpointSettings) error {
|
||||||
|
if n == nil || epConfig == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if !hasUserDefinedIPAddress(epConfig) {
|
if !hasUserDefinedIPAddress(epConfig) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -704,7 +707,7 @@ func cleanOperationalData(es *networktypes.EndpointSettings) {
|
||||||
es.MacAddress = ""
|
es.MacAddress = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (daemon *Daemon) updateNetworkConfig(container *container.Container, idOrName string, updateSettings bool) (libnetwork.Network, error) {
|
func (daemon *Daemon) updateNetworkConfig(container *container.Container, idOrName string, endpointConfig *networktypes.EndpointSettings, updateSettings bool) (libnetwork.Network, error) {
|
||||||
if container.HostConfig.NetworkMode.IsContainer() {
|
if container.HostConfig.NetworkMode.IsContainer() {
|
||||||
return nil, runconfig.ErrConflictSharedNetwork
|
return nil, runconfig.ErrConflictSharedNetwork
|
||||||
}
|
}
|
||||||
|
@ -715,11 +718,24 @@ func (daemon *Daemon) updateNetworkConfig(container *container.Container, idOrNa
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !containertypes.NetworkMode(idOrName).IsUserDefined() {
|
||||||
|
if hasUserDefinedIPAddress(endpointConfig) {
|
||||||
|
return nil, runconfig.ErrUnsupportedNetworkAndIP
|
||||||
|
}
|
||||||
|
if endpointConfig != nil && len(endpointConfig.Aliases) > 0 {
|
||||||
|
return nil, runconfig.ErrUnsupportedNetworkAndAlias
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
n, err := daemon.FindNetwork(idOrName)
|
n, err := daemon.FindNetwork(idOrName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := validateNetworkingConfig(n, endpointConfig); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
if updateSettings {
|
if updateSettings {
|
||||||
if err := daemon.updateNetworkSettings(container, n); err != nil {
|
if err := daemon.updateNetworkSettings(container, n); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -734,7 +750,7 @@ func (daemon *Daemon) ConnectToNetwork(container *container.Container, idOrName
|
||||||
if container.RemovalInProgress || container.Dead {
|
if container.RemovalInProgress || container.Dead {
|
||||||
return derr.ErrorCodeRemovalContainer.WithArgs(container.ID)
|
return derr.ErrorCodeRemovalContainer.WithArgs(container.ID)
|
||||||
}
|
}
|
||||||
if _, err := daemon.updateNetworkConfig(container, idOrName, true); err != nil {
|
if _, err := daemon.updateNetworkConfig(container, idOrName, endpointConfig, true); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -749,7 +765,7 @@ func (daemon *Daemon) ConnectToNetwork(container *container.Container, idOrName
|
||||||
}
|
}
|
||||||
|
|
||||||
func (daemon *Daemon) connectToNetwork(container *container.Container, idOrName string, endpointConfig *networktypes.EndpointSettings, updateSettings bool) (err error) {
|
func (daemon *Daemon) connectToNetwork(container *container.Container, idOrName string, endpointConfig *networktypes.EndpointSettings, updateSettings bool) (err error) {
|
||||||
n, err := daemon.updateNetworkConfig(container, idOrName, updateSettings)
|
n, err := daemon.updateNetworkConfig(container, idOrName, endpointConfig, updateSettings)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -760,17 +776,6 @@ func (daemon *Daemon) connectToNetwork(container *container.Container, idOrName
|
||||||
controller := daemon.netController
|
controller := daemon.netController
|
||||||
|
|
||||||
if endpointConfig != nil {
|
if endpointConfig != nil {
|
||||||
if !containertypes.NetworkMode(idOrName).IsUserDefined() && hasUserDefinedIPAddress(endpointConfig) {
|
|
||||||
return runconfig.ErrUnsupportedNetworkAndIP
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := validateNetworkingConfig(n, endpointConfig); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if !containertypes.NetworkMode(idOrName).IsUserDefined() && len(endpointConfig.Aliases) > 0 {
|
|
||||||
return runconfig.ErrUnsupportedNetworkAndAlias
|
|
||||||
}
|
|
||||||
container.NetworkSettings.Networks[n.Name()] = endpointConfig
|
container.NetworkSettings.Networks[n.Name()] = endpointConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1146,7 +1146,7 @@ func (s *DockerNetworkSuite) TestDockerNetworkConnectPreferredIP(c *check.C) {
|
||||||
|
|
||||||
func (s *DockerNetworkSuite) TestDockerNetworkUnsupportedPreferredIP(c *check.C) {
|
func (s *DockerNetworkSuite) TestDockerNetworkUnsupportedPreferredIP(c *check.C) {
|
||||||
// preferred IP is not supported on predefined networks
|
// preferred IP is not supported on predefined networks
|
||||||
for _, mode := range []string{"none", "host", "bridge"} {
|
for _, mode := range []string{"none", "host", "bridge", "default"} {
|
||||||
checkUnsupportedNetworkAndIP(c, mode)
|
checkUnsupportedNetworkAndIP(c, mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1299,4 +1299,14 @@ func (s *DockerSuite) TestUserDefinedNetworkConnectDisconnectAlias(c *check.C) {
|
||||||
// ping to net2 scoped alias "bar" must still succeed
|
// ping to net2 scoped alias "bar" must still succeed
|
||||||
_, _, err = dockerCmdWithError("exec", "second", "ping", "-c", "1", "bar")
|
_, _, err = dockerCmdWithError("exec", "second", "ping", "-c", "1", "bar")
|
||||||
c.Assert(err, check.IsNil)
|
c.Assert(err, check.IsNil)
|
||||||
|
|
||||||
|
// verify the alias option is rejected when running on predefined network
|
||||||
|
out, _, err := dockerCmdWithError("run", "--rm", "--name=any", "--net-alias=any", "busybox", "top")
|
||||||
|
c.Assert(err, checker.NotNil, check.Commentf("out: %s", out))
|
||||||
|
c.Assert(out, checker.Contains, runconfig.ErrUnsupportedNetworkAndAlias.Error())
|
||||||
|
|
||||||
|
// verify the alias option is rejected when connecting to predefined network
|
||||||
|
out, _, err = dockerCmdWithError("network", "connect", "--alias=any", "bridge", "first")
|
||||||
|
c.Assert(err, checker.NotNil, check.Commentf("out: %s", out))
|
||||||
|
c.Assert(out, checker.Contains, runconfig.ErrUnsupportedNetworkAndAlias.Error())
|
||||||
}
|
}
|
||||||
|
|
|
@ -442,7 +442,7 @@ func Parse(cmd *flag.FlagSet, args []string) (*container.Config, *container.Host
|
||||||
networkingConfig.EndpointsConfig[string(hostConfig.NetworkMode)] = epConfig
|
networkingConfig.EndpointsConfig[string(hostConfig.NetworkMode)] = epConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
if hostConfig.NetworkMode.IsUserDefined() && flAliases.Len() > 0 {
|
if flAliases.Len() > 0 {
|
||||||
epConfig := networkingConfig.EndpointsConfig[string(hostConfig.NetworkMode)]
|
epConfig := networkingConfig.EndpointsConfig[string(hostConfig.NetworkMode)]
|
||||||
if epConfig == nil {
|
if epConfig == nil {
|
||||||
epConfig = &networktypes.EndpointSettings{}
|
epConfig = &networktypes.EndpointSettings{}
|
||||||
|
|
Loading…
Add table
Reference in a new issue