Merge pull request #47361 from robmry/47331_swarm_ipam_validation
Don't enforce new validation rules for existing networks
This commit is contained in:
commit
9d1541526c
2 changed files with 25 additions and 1 deletions
|
@ -213,6 +213,10 @@ func (n *networkRouter) postNetworkCreate(ctx context.Context, w http.ResponseWr
|
|||
return libnetwork.NetworkNameError(create.Name)
|
||||
}
|
||||
|
||||
// For a Swarm-scoped network, this call to backend.CreateNetwork is used to
|
||||
// validate the configuration. The network will not be created but, if the
|
||||
// configuration is valid, ManagerRedirectError will be returned and handled
|
||||
// below.
|
||||
nw, err := n.backend.CreateNetwork(create)
|
||||
if err != nil {
|
||||
if _, ok := err.(libnetwork.ManagerRedirectError); !ok {
|
||||
|
|
|
@ -332,7 +332,27 @@ func (daemon *Daemon) createNetwork(cfg *config.Config, create types.NetworkCrea
|
|||
}
|
||||
|
||||
if err := network.ValidateIPAM(create.IPAM, create.EnableIPv6); err != nil {
|
||||
return nil, errdefs.InvalidParameter(err)
|
||||
if agent {
|
||||
// This function is called with agent=false for all networks. For swarm-scoped
|
||||
// networks, the configuration is validated but ManagerRedirectError is returned
|
||||
// and the network is not created. Then, each time a swarm-scoped network is
|
||||
// needed, this function is called again with agent=true.
|
||||
//
|
||||
// Non-swarm networks created before ValidateIPAM was introduced continue to work
|
||||
// as they did before-upgrade, even if they would fail the new checks on creation
|
||||
// (for example, by having host-bits set in their subnet). Those networks are not
|
||||
// seen again here.
|
||||
//
|
||||
// By dropping errors for agent networks, existing swarm-scoped networks also
|
||||
// continue to behave as they did before upgrade - but new networks are still
|
||||
// validated.
|
||||
log.G(context.TODO()).WithFields(log.Fields{
|
||||
"error": err,
|
||||
"network": create.Name,
|
||||
}).Warn("Continuing with validation errors in agent IPAM")
|
||||
} else {
|
||||
return nil, errdefs.InvalidParameter(err)
|
||||
}
|
||||
}
|
||||
|
||||
if create.IPAM != nil {
|
||||
|
|
Loading…
Add table
Reference in a new issue