@@ -3,6 +3,7 @@ package swarm
33import (
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
2629func 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
5259func 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 ))
0 commit comments