Skip to content

Commit e97d004

Browse files
Merge pull request #1233 from selansen/default_addr_pool
Global Default Address Pool feature support
2 parents 2461cd6 + 587a94c commit e97d004

20 files changed

Lines changed: 1433 additions & 278 deletions

File tree

cli/command/swarm/init.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package swarm
33
import (
44
"context"
55
"fmt"
6+
"net"
67
"strings"
78

89
"github.com/docker/cli/cli"
@@ -17,10 +18,12 @@ type initOptions struct {
1718
swarmOptions
1819
listenAddr NodeAddrOption
1920
// Not a NodeAddrOption because it has no default port.
20-
advertiseAddr string
21-
dataPathAddr string
22-
forceNewCluster bool
23-
availability string
21+
advertiseAddr string
22+
dataPathAddr string
23+
forceNewCluster bool
24+
availability string
25+
defaultAddrPools []net.IPNet
26+
DefaultAddrPoolMaskLength uint32
2427
}
2528

2629
func newInitCommand(dockerCli command.Cli) *cobra.Command {
@@ -45,21 +48,32 @@ func newInitCommand(dockerCli command.Cli) *cobra.Command {
4548
flags.BoolVar(&opts.forceNewCluster, "force-new-cluster", false, "Force create a new cluster from current state")
4649
flags.BoolVar(&opts.autolock, flagAutolock, false, "Enable manager autolocking (requiring an unlock key to start a stopped manager)")
4750
flags.StringVar(&opts.availability, flagAvailability, "active", `Availability of the node ("active"|"pause"|"drain")`)
51+
flags.IPNetSliceVar(&opts.defaultAddrPools, flagDefaultAddrPool, []net.IPNet{}, "default address pool in CIDR format")
52+
flags.SetAnnotation(flagDefaultAddrPool, "version", []string{"1.39"})
53+
flags.Uint32Var(&opts.DefaultAddrPoolMaskLength, flagDefaultAddrPoolMaskLength, 24, "default address pool subnet mask length")
54+
flags.SetAnnotation(flagDefaultAddrPoolMaskLength, "version", []string{"1.39"})
4855
addSwarmFlags(flags, &opts.swarmOptions)
4956
return cmd
5057
}
5158

5259
func runInit(dockerCli command.Cli, flags *pflag.FlagSet, opts initOptions) error {
60+
var defaultAddrPool []string
61+
5362
client := dockerCli.Client()
5463
ctx := context.Background()
5564

65+
for _, p := range opts.defaultAddrPools {
66+
defaultAddrPool = append(defaultAddrPool, p.String())
67+
}
5668
req := swarm.InitRequest{
5769
ListenAddr: opts.listenAddr.String(),
5870
AdvertiseAddr: opts.advertiseAddr,
5971
DataPathAddr: opts.dataPathAddr,
72+
DefaultAddrPool: defaultAddrPool,
6073
ForceNewCluster: opts.forceNewCluster,
6174
Spec: opts.swarmOptions.ToSpec(flags),
6275
AutoLockManagers: opts.swarmOptions.autolock,
76+
SubnetSize: opts.DefaultAddrPoolMaskLength,
6377
}
6478
if flags.Changed(flagAvailability) {
6579
availability := swarm.NodeAvailability(strings.ToLower(opts.availability))

cli/command/swarm/opts.go

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,24 @@ import (
1717
const (
1818
defaultListenAddr = "0.0.0.0:2377"
1919

20-
flagCertExpiry = "cert-expiry"
21-
flagDispatcherHeartbeat = "dispatcher-heartbeat"
22-
flagListenAddr = "listen-addr"
23-
flagAdvertiseAddr = "advertise-addr"
24-
flagDataPathAddr = "data-path-addr"
25-
flagQuiet = "quiet"
26-
flagRotate = "rotate"
27-
flagToken = "token"
28-
flagTaskHistoryLimit = "task-history-limit"
29-
flagExternalCA = "external-ca"
30-
flagMaxSnapshots = "max-snapshots"
31-
flagSnapshotInterval = "snapshot-interval"
32-
flagAutolock = "autolock"
33-
flagAvailability = "availability"
34-
flagCACert = "ca-cert"
35-
flagCAKey = "ca-key"
20+
flagCertExpiry = "cert-expiry"
21+
flagDispatcherHeartbeat = "dispatcher-heartbeat"
22+
flagListenAddr = "listen-addr"
23+
flagAdvertiseAddr = "advertise-addr"
24+
flagDataPathAddr = "data-path-addr"
25+
flagDefaultAddrPool = "default-addr-pool"
26+
flagDefaultAddrPoolMaskLength = "default-addr-pool-mask-length"
27+
flagQuiet = "quiet"
28+
flagRotate = "rotate"
29+
flagToken = "token"
30+
flagTaskHistoryLimit = "task-history-limit"
31+
flagExternalCA = "external-ca"
32+
flagMaxSnapshots = "max-snapshots"
33+
flagSnapshotInterval = "snapshot-interval"
34+
flagAutolock = "autolock"
35+
flagAvailability = "availability"
36+
flagCACert = "ca-cert"
37+
flagCAKey = "ca-key"
3638
)
3739

3840
type swarmOptions struct {

cli/command/system/info.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ func prettyPrintInfo(dockerCli command.Cli, info types.Info) error {
248248
return nil
249249
}
250250

251+
// nolint: gocyclo
251252
func printSwarmInfo(dockerCli command.Cli, info types.Info) {
252253
if info.Swarm.LocalNodeState == swarm.LocalNodeStateInactive || info.Swarm.LocalNodeState == swarm.LocalNodeStateLocked {
253254
return
@@ -261,7 +262,16 @@ func printSwarmInfo(dockerCli command.Cli, info types.Info) {
261262
fmt.Fprintln(dockerCli.Out(), " ClusterID:", info.Swarm.Cluster.ID)
262263
fmt.Fprintln(dockerCli.Out(), " Managers:", info.Swarm.Managers)
263264
fmt.Fprintln(dockerCli.Out(), " Nodes:", info.Swarm.Nodes)
265+
var strAddrPool strings.Builder
266+
if info.Swarm.Cluster.DefaultAddrPool != nil {
267+
for _, p := range info.Swarm.Cluster.DefaultAddrPool {
268+
strAddrPool.WriteString(p + " ")
269+
}
270+
fmt.Fprintln(dockerCli.Out(), " Default Address Pool:", strAddrPool.String())
271+
fmt.Fprintln(dockerCli.Out(), " SubnetSize:", info.Swarm.Cluster.SubnetSize)
272+
}
264273
fmt.Fprintln(dockerCli.Out(), " Orchestration:")
274+
265275
taskHistoryRetentionLimit := int64(0)
266276
if info.Swarm.Cluster.Spec.Orchestration.TaskHistoryRetentionLimit != nil {
267277
taskHistoryRetentionLimit = *info.Swarm.Cluster.Spec.Orchestration.TaskHistoryRetentionLimit

contrib/completion/bash/docker

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3697,7 +3697,7 @@ _docker_swarm_init() {
36973697
COMPREPLY=( $( compgen -W "active drain pause" -- "$cur" ) )
36983698
return
36993699
;;
3700-
--cert-expiry|--dispatcher-heartbeat|--external-ca|--max-snapshots|--snapshot-interval|--task-history-limit)
3700+
--cert-expiry|--default-addr-pool|--default-addr-pool-mask-length|--dispatcher-heartbeat|--external-ca|--max-snapshots|--snapshot-interval|--task-history-limit )
37013701
return
37023702
;;
37033703
--data-path-addr)
@@ -3717,7 +3717,7 @@ _docker_swarm_init() {
37173717

37183718
case "$cur" in
37193719
-*)
3720-
COMPREPLY=( $( compgen -W "--advertise-addr --autolock --availability --cert-expiry --data-path-addr --dispatcher-heartbeat --external-ca --force-new-cluster --help --listen-addr --max-snapshots --snapshot-interval --task-history-limit" -- "$cur" ) )
3720+
COMPREPLY=( $( compgen -W "--advertise-addr --autolock --availability --cert-expiry --data-path-addr --default-addr-pool --default-addr-pool-mask-length --dispatcher-heartbeat --external-ca --force-new-cluster --help --listen-addr --max-snapshots --snapshot-interval --task-history-limit" -- "$cur" ) )
37213721
;;
37223722
esac
37233723
}

contrib/completion/zsh/_docker

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2285,6 +2285,8 @@ __docker_swarm_subcommand() {
22852285
$opts_help \
22862286
"($help)--advertise-addr=[Advertised address]:ip\:port: " \
22872287
"($help)--data-path-addr=[Data path IP or interface]:ip " \
2288+
"($help)--default-addr-pool=[Default address pool]" \
2289+
"($help)--default-addr-pool-mask-length=[Default address pool subnet mask length]" \
22882290
"($help)--autolock[Enable manager autolocking]" \
22892291
"($help)--availability=[Availability of the node]:availability:(active drain pause)" \
22902292
"($help)--cert-expiry=[Validity period for node certificates]:duration: " \

docs/reference/commandline/swarm_init.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ Options:
2626
--availability string Availability of the node ("active"|"pause"|"drain") (default "active")
2727
--cert-expiry duration Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)
2828
--data-path-addr string Address or interface to use for data path traffic (format: <ip|interface>)
29+
--default-addr-pool IPnet List of default address pool (format: <cidr>)
30+
--default-addr-pool-mask-length Subnet mask length for default address pool (default 24)
2931
--dispatcher-heartbeat duration Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)
3032
--external-ca external-ca Specifications of one or more certificate signing endpoints
3133
--force-new-cluster Force create a new cluster from current state
@@ -128,6 +130,14 @@ management traffic of the cluster.
128130
If unspecified, Docker will use the same IP address or interface that is used for the
129131
advertise address.
130132

133+
### `--default-addr-pool`
134+
This flag specifies default subnet pools for global scope networks.
135+
Format example is `--default-addr-pool 30.30.0.0/16 --default-addr-pool 40.40.0.0/16`
136+
137+
### `--default-addr-pool-mask-length`
138+
This flag specifies default subnet pools mask length for default-addr-pool.
139+
Format example is `--default-addr-pool-mask-length 24`
140+
131141
### `--task-history-limit`
132142

133143
This flag sets up task history retention limit.

vendor.conf

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ github.com/cpuguy83/go-md2man v1.0.8
1212
github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76 # v1.1.0
1313
github.com/dgrijalva/jwt-go a2c85815a77d0f951e33ba4db5ae93629a1530af
1414
github.com/docker/distribution 83389a148052d74ac602f5f1d62f86ff2f3c4aa5
15-
github.com/docker/docker 991682749612d6613d5f49035f62e2a479c0dc59
15+
github.com/docker/docker 1800883bd16664846db1572b8c8fbe8c85892cee
1616
github.com/docker/docker-credential-helpers 5241b46610f2491efdf9d1c85f1ddf5b02f6d962
1717
# the docker/go package contains a customized version of canonical/json
1818
# and is used by Notary. The package is periodically rebased on current Go versions.
@@ -23,7 +23,7 @@ github.com/docker/go-metrics d466d4f6fd960e01820085bd7e1a24426ee7ef18
2323
github.com/docker/go-units 47565b4f722fb6ceae66b95f853feed578a4a51c # v0.3.3
2424
github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a
2525
github.com/docker/licensing 369e530
26-
github.com/docker/swarmkit edd5641391926a50bc5f7040e20b7efc05003c26
26+
github.com/docker/swarmkit cfa742c8abe6f8e922f6e4e920153c408e7d9c3b
2727
github.com/flynn-archive/go-shlex 3f9db97f856818214da2e1057f8ad84803971cff
2828
github.com/ghodss/yaml 0ca9ea5df5451ffdf184b4428c902747c2c11cd7 # v1.0.0
2929
github.com/gogo/googleapis 08a7655d27152912db7aaf4f983275eaf8d128ef
@@ -72,7 +72,8 @@ github.com/satori/go.uuid d41af8bb6a7704f00bc3b7cba9355ae6a5a80048
7272
github.com/shurcooL/sanitized_anchor_name 10ef21a441db47d8b13ebcc5fd2310f636973c77
7373
github.com/sirupsen/logrus v1.0.6
7474
github.com/spf13/cobra v0.0.3
75-
github.com/spf13/pflag v1.0.1
75+
# temporary fork with https://github.com/spf13/pflag/pull/170 applied, which isn't merged yet upstream
76+
github.com/spf13/pflag 4cb166e4f25ac4e8016a3595bbf7ea2e9aa85a2c https://github.com/thaJeztah/pflag.git
7677
github.com/syndtr/gocapability 2c00daeb6c3b45114c80ac44119e7b8801fdd852
7778
github.com/theupdateframework/notary v0.6.1
7879
github.com/tonistiigi/fsutil b19464cd1b6a00773b4f2eb7acf9c30426f9df42

vendor/github.com/docker/docker/api/types/swarm/swarm.go

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

vendor/github.com/docker/docker/vendor.conf

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)