github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/manager/allocator/cnmallocator/drivers_ipam.go (about) 1 package cnmallocator 2 3 import ( 4 "strconv" 5 "strings" 6 7 "github.com/docker/libnetwork/drvregistry" 8 "github.com/docker/libnetwork/ipamapi" 9 builtinIpam "github.com/docker/libnetwork/ipams/builtin" 10 nullIpam "github.com/docker/libnetwork/ipams/null" 11 remoteIpam "github.com/docker/libnetwork/ipams/remote" 12 "github.com/docker/libnetwork/ipamutils" 13 "github.com/sirupsen/logrus" 14 ) 15 16 func initIPAMDrivers(r *drvregistry.DrvRegistry, netConfig *NetworkConfig) error { 17 var addressPool []*ipamutils.NetworkToSplit 18 var str strings.Builder 19 str.WriteString("Subnetlist - ") 20 // Extract defaultAddrPool param info and construct ipamutils.NetworkToSplit 21 // from the info. We will be using it to call Libnetwork API 22 // We also need to log new address pool info whenever swarm init 23 // happens with default address pool option 24 if netConfig != nil { 25 for _, p := range netConfig.DefaultAddrPool { 26 addressPool = append(addressPool, &ipamutils.NetworkToSplit{ 27 Base: p, 28 Size: int(netConfig.SubnetSize), 29 }) 30 str.WriteString(p + ",") 31 } 32 str.WriteString(": Size ") 33 str.WriteString(strconv.Itoa(int(netConfig.SubnetSize))) 34 35 } 36 if err := ipamutils.ConfigGlobalScopeDefaultNetworks(addressPool); err != nil { 37 return err 38 } 39 if addressPool != nil { 40 logrus.Infof("Swarm initialized global default address pool to: " + str.String()) 41 } 42 43 for _, fn := range [](func(ipamapi.Callback, interface{}, interface{}) error){ 44 builtinIpam.Init, 45 remoteIpam.Init, 46 nullIpam.Init, 47 } { 48 if err := fn(r, nil, nil); err != nil { 49 return err 50 } 51 } 52 53 return nil 54 }