Skip to content

Commit 148ff00

Browse files
committed
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>
1 parent f7ad95c commit 148ff00

File tree

15 files changed

+441
-206
lines changed

15 files changed

+441
-206
lines changed

daemon/cluster/listen_addr.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package cluster // import "github.com/docker/docker/daemon/cluster"
33
import (
44
"fmt"
55
"net"
6+
"strings"
67
)
78

89
const (
@@ -87,6 +88,36 @@ func (c *Cluster) resolveAdvertiseAddr(advertiseAddr, listenAddrPort string) (st
8788
return systemAddr.String(), listenAddrPort, nil
8889
}
8990

91+
// validateDefaultAddrPool validates default address pool
92+
// it also strips white space from the string before validation
93+
func validateDefaultAddrPool(defaultAddrPool []string, size uint32) error {
94+
if defaultAddrPool == nil {
95+
// defaultAddrPool is not defined
96+
return nil
97+
}
98+
//if size is not set, then we use default value 24
99+
if size == 0 {
100+
size = 24
101+
}
102+
if size > 32 {
103+
return fmt.Errorf("subnet size is out of range: %d", size)
104+
}
105+
for i := range defaultAddrPool {
106+
// trim leading and trailing white spaces
107+
defaultAddrPool[i] = strings.TrimSpace(defaultAddrPool[i])
108+
_, b, err := net.ParseCIDR(defaultAddrPool[i])
109+
if err != nil {
110+
return fmt.Errorf("invalid base pool %s: %v", defaultAddrPool[i], err)
111+
}
112+
ones, _ := b.Mask.Size()
113+
if size < uint32(ones) {
114+
return fmt.Errorf("invalid CIDR: %q. Subnet size is too small for pool: %d", defaultAddrPool[i], size)
115+
}
116+
}
117+
118+
return nil
119+
}
120+
90121
func resolveDataPathAddr(dataPathAddr string) (string, error) {
91122
if dataPathAddr == "" {
92123
// dataPathAddr is not defined

daemon/cluster/noderunner.go

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package cluster // import "github.com/docker/docker/daemon/cluster"
33
import (
44
"context"
55
"fmt"
6-
"net"
76
"path/filepath"
87
"runtime"
98
"strings"
@@ -14,6 +13,7 @@ import (
1413
"github.com/docker/docker/daemon/cluster/executor/container"
1514
lncluster "github.com/docker/libnetwork/cluster"
1615
swarmapi "github.com/docker/swarmkit/api"
16+
swarmallocator "github.com/docker/swarmkit/manager/allocator/cnmallocator"
1717
swarmnode "github.com/docker/swarmkit/node"
1818
"github.com/pkg/errors"
1919
"github.com/sirupsen/logrus"
@@ -115,24 +115,20 @@ func (n *nodeRunner) start(conf nodeStartConfig) error {
115115
joinAddr = conf.RemoteAddr
116116
}
117117

118-
var defaultAddrPool []*net.IPNet
119-
for _, address := range conf.DefaultAddressPool {
120-
if _, b, err := net.ParseCIDR(address); err == nil {
121-
defaultAddrPool = append(defaultAddrPool, b)
122-
}
123-
}
124118
// Hostname is not set here. Instead, it is obtained from
125119
// the node description that is reported periodically
126120
swarmnodeConfig := swarmnode.Config{
127121
ForceNewCluster: conf.forceNewCluster,
128122
ListenControlAPI: control,
129123
ListenRemoteAPI: conf.ListenAddr,
130124
AdvertiseRemoteAPI: conf.AdvertiseAddr,
131-
DefaultAddrPool: defaultAddrPool,
132-
SubnetSize: int(conf.SubnetSize),
133-
JoinAddr: joinAddr,
134-
StateDir: n.cluster.root,
135-
JoinToken: conf.joinToken,
125+
NetworkConfig: &swarmallocator.NetworkConfig{
126+
DefaultAddrPool: conf.DefaultAddressPool,
127+
SubnetSize: conf.SubnetSize,
128+
},
129+
JoinAddr: joinAddr,
130+
StateDir: n.cluster.root,
131+
JoinToken: conf.joinToken,
136132
Executor: container.NewExecutor(
137133
n.cluster.config.Backend,
138134
n.cluster.config.PluginBackend,

daemon/cluster/swarm.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ func (c *Cluster) Init(req types.InitRequest) (string, error) {
9292
}
9393
}
9494

95+
//Validate Default Address Pool input
96+
if err := validateDefaultAddrPool(req.DefaultAddrPool, req.SubnetSize); err != nil {
97+
return "", err
98+
}
9599
nr, err := c.newNodeRunner(nodeStartConfig{
96100
forceNewCluster: req.ForceNewCluster,
97101
autolock: req.AutoLockManagers,

integration/network/service_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ func TestServiceWithDefaultAddressPoolInit(t *testing.T) {
353353
d.Stop(t)
354354

355355
// Clean up , set it back to original one to make sure other tests don't fail
356-
ipAddr = []string{"10.10.0.0/8"}
356+
ipAddr = []string{"10.0.0.0/8"}
357357
ops = append(ops, daemon.WithSwarmDefaultAddrPool(ipAddr))
358358
ops = append(ops, daemon.WithSwarmDefaultAddrPoolSubnetSize(24))
359359
d = swarm.NewSwarm(t, testEnv, ops...)

vendor.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ github.com/containerd/ttrpc 94dde388801693c54f88a6596f713b51a8b30b2d
125125
github.com/gogo/googleapis 08a7655d27152912db7aaf4f983275eaf8d128ef
126126

127127
# cluster
128-
github.com/docker/swarmkit cfa742c8abe6f8e922f6e4e920153c408e7d9c3b
128+
github.com/docker/swarmkit d7d23d763a2d47ad6e540f81ab3609f6c323e9be
129129
github.com/gogo/protobuf v1.0.0
130130
github.com/cloudflare/cfssl 1.3.2
131131
github.com/fernet/fernet-go 1b2437bc582b3cfbb341ee5a29f8ef5b42912ff2

vendor/github.com/docker/swarmkit/agent/session.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)