Global Default AddressPool - Update
Addressing few review comments as part of code refactoring. Also moved validation logic from CLI to Moby. Signed-off-by: selansen <elango.siva@docker.com> (cherry picked from commit 148ff00a0a800fad99de11ee3021d4c5d4869157) Signed-off-by: Sebastiaan van Stijn <github@gone.nl> Upstream-commit: 9816bfcaf58a609d64d648043c10817c27dcfa36 Component: engine
This commit is contained in:
committed by
Sebastiaan van Stijn
parent
6e8e954345
commit
b4ba6169d9
@ -3,6 +3,7 @@ package cluster // import "github.com/docker/docker/daemon/cluster"
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -87,6 +88,36 @@ func (c *Cluster) resolveAdvertiseAddr(advertiseAddr, listenAddrPort string) (st
|
||||
return systemAddr.String(), listenAddrPort, nil
|
||||
}
|
||||
|
||||
// validateDefaultAddrPool validates default address pool
|
||||
// it also strips white space from the string before validation
|
||||
func validateDefaultAddrPool(defaultAddrPool []string, size uint32) error {
|
||||
if defaultAddrPool == nil {
|
||||
// defaultAddrPool is not defined
|
||||
return nil
|
||||
}
|
||||
//if size is not set, then we use default value 24
|
||||
if size == 0 {
|
||||
size = 24
|
||||
}
|
||||
if size > 32 {
|
||||
return fmt.Errorf("subnet size is out of range: %d", size)
|
||||
}
|
||||
for i := range defaultAddrPool {
|
||||
// trim leading and trailing white spaces
|
||||
defaultAddrPool[i] = strings.TrimSpace(defaultAddrPool[i])
|
||||
_, b, err := net.ParseCIDR(defaultAddrPool[i])
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid base pool %s: %v", defaultAddrPool[i], err)
|
||||
}
|
||||
ones, _ := b.Mask.Size()
|
||||
if size < uint32(ones) {
|
||||
return fmt.Errorf("invalid CIDR: %q. Subnet size is too small for pool: %d", defaultAddrPool[i], size)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func resolveDataPathAddr(dataPathAddr string) (string, error) {
|
||||
if dataPathAddr == "" {
|
||||
// dataPathAddr is not defined
|
||||
|
||||
@ -92,6 +92,10 @@ func (c *Cluster) Init(req types.InitRequest) (string, error) {
|
||||
}
|
||||
}
|
||||
|
||||
//Validate Default Address Pool input
|
||||
if err := validateDefaultAddrPool(req.DefaultAddrPool, req.SubnetSize); err != nil {
|
||||
return "", err
|
||||
}
|
||||
nr, err := c.newNodeRunner(nodeStartConfig{
|
||||
forceNewCluster: req.ForceNewCluster,
|
||||
autolock: req.AutoLockManagers,
|
||||
|
||||
@ -355,7 +355,7 @@ func TestServiceWithDefaultAddressPoolInit(t *testing.T) {
|
||||
d.Stop(t)
|
||||
|
||||
// Clean up , set it back to original one to make sure other tests don't fail
|
||||
ipAddr = []string{"10.10.0.0/8"}
|
||||
ipAddr = []string{"10.0.0.0/8"}
|
||||
ops = append(ops, daemon.WithSwarmDefaultAddrPool(ipAddr))
|
||||
ops = append(ops, daemon.WithSwarmDefaultAddrPoolSubnetSize(24))
|
||||
d = swarm.NewSwarm(t, testEnv, ops...)
|
||||
|
||||
Reference in New Issue
Block a user