diff --git a/vendor.mod b/vendor.mod index a5d4326ff9..7d024fa468 100644 --- a/vendor.mod +++ b/vendor.mod @@ -65,7 +65,7 @@ require ( github.com/moby/locker v1.0.1 github.com/moby/patternmatcher v0.5.0 github.com/moby/pubsub v1.0.0 - github.com/moby/swarmkit/v2 v2.0.0-20230627115642-ad0f3ae162fa + github.com/moby/swarmkit/v2 v2.0.0-20230707182847-6f78b8199b05 github.com/moby/sys/mount v0.3.3 github.com/moby/sys/mountinfo v0.6.2 github.com/moby/sys/sequential v0.5.0 diff --git a/vendor.sum b/vendor.sum index 41b01cc4e0..40d970f852 100644 --- a/vendor.sum +++ b/vendor.sum @@ -1064,8 +1064,8 @@ github.com/moby/patternmatcher v0.5.0 h1:YCZgJOeULcxLw1Q+sVR636pmS7sPEn1Qo2iAN6M github.com/moby/patternmatcher v0.5.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= github.com/moby/pubsub v1.0.0 h1:jkp/imWsmJz2f6LyFsk7EkVeN2HxR/HTTOY8kHrsxfA= github.com/moby/pubsub v1.0.0/go.mod h1:bXSO+3h5MNXXCaEG+6/NlAIk7MMZbySZlnB+cUQhKKc= -github.com/moby/swarmkit/v2 v2.0.0-20230627115642-ad0f3ae162fa h1:9IilX0rZvnrQA+a0Cr9a9LKpudNrOWhT3Fy7T4yKcPc= -github.com/moby/swarmkit/v2 v2.0.0-20230627115642-ad0f3ae162fa/go.mod h1:pC/nyFbvVvSV+Gm1rARMgMR3FrCumwEyoMjqVwEzJvA= +github.com/moby/swarmkit/v2 v2.0.0-20230707182847-6f78b8199b05 h1:lvMq6zHXnGp6i+6iYDs1Uw9Q5bqiAYd6Sz08hZoxSmY= +github.com/moby/swarmkit/v2 v2.0.0-20230707182847-6f78b8199b05/go.mod h1:XUMlwIIC+wrwBDMUjxEvk5Z8FPoIPM8LdBw7w/Zu1rg= github.com/moby/sys/mount v0.1.0/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74= github.com/moby/sys/mount v0.1.1/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74= github.com/moby/sys/mount v0.3.3 h1:fX1SVkXFJ47XWDoeFW4Sq7PdQJnV2QIDZAqjNqgEjUs= diff --git a/vendor/github.com/moby/swarmkit/v2/internal/idm/idm.go b/vendor/github.com/moby/swarmkit/v2/internal/idm/idm.go new file mode 100644 index 0000000000..162bdeb903 --- /dev/null +++ b/vendor/github.com/moby/swarmkit/v2/internal/idm/idm.go @@ -0,0 +1,69 @@ +// Package idm manages reservation/release of numerical ids from a configured set of contiguous ids. +package idm + +import ( + "errors" + "fmt" + + "github.com/docker/docker/libnetwork/bitmap" +) + +// IDM manages the reservation/release of numerical ids from a contiguous set. +// +// An IDM instance is not safe for concurrent use. +type IDM struct { + start uint64 + end uint64 + handle *bitmap.Bitmap +} + +// New returns an instance of id manager for a [start,end] set of numerical ids. +func New(start, end uint64) (*IDM, error) { + if end <= start { + return nil, fmt.Errorf("invalid set range: [%d, %d]", start, end) + } + + return &IDM{start: start, end: end, handle: bitmap.New(1 + end - start)}, nil +} + +// GetID returns the first available id in the set. +func (i *IDM) GetID(serial bool) (uint64, error) { + if i.handle == nil { + return 0, errors.New("ID set is not initialized") + } + ordinal, err := i.handle.SetAny(serial) + return i.start + ordinal, err +} + +// GetSpecificID tries to reserve the specified id. +func (i *IDM) GetSpecificID(id uint64) error { + if i.handle == nil { + return errors.New("ID set is not initialized") + } + + if id < i.start || id > i.end { + return errors.New("requested id does not belong to the set") + } + + return i.handle.Set(id - i.start) +} + +// GetIDInRange returns the first available id in the set within a [start,end] range. +func (i *IDM) GetIDInRange(start, end uint64, serial bool) (uint64, error) { + if i.handle == nil { + return 0, errors.New("ID set is not initialized") + } + + if start < i.start || end > i.end { + return 0, errors.New("requested range does not belong to the set") + } + + ordinal, err := i.handle.SetAnyInRange(start-i.start, end-i.start, serial) + + return i.start + ordinal, err +} + +// Release releases the specified id. +func (i *IDM) Release(id uint64) { + i.handle.Unset(id - i.start) +} diff --git a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_darwin.go b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_darwin.go index e7d3dbe710..ac4152db22 100644 --- a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_darwin.go +++ b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_darwin.go @@ -1,14 +1,13 @@ package cnmallocator import ( + "github.com/docker/docker/libnetwork/driverapi" "github.com/docker/docker/libnetwork/drivers/overlay/ovmanager" - "github.com/docker/docker/libnetwork/drivers/remote" "github.com/moby/swarmkit/v2/manager/allocator/networkallocator" ) -var initializers = []initializer{ - {remote.Init, "remote"}, - {ovmanager.Init, "overlay"}, +var initializers = map[string]func(driverapi.Registerer) error{ + "overlay": ovmanager.Register, } // PredefinedNetworks returns the list of predefined network structures diff --git a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_ipam.go b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_ipam.go index 1b9617d31e..61b8614e2e 100644 --- a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_ipam.go +++ b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_ipam.go @@ -4,16 +4,14 @@ import ( "strconv" "strings" - "github.com/docker/docker/libnetwork/drvregistry" "github.com/docker/docker/libnetwork/ipamapi" builtinIpam "github.com/docker/docker/libnetwork/ipams/builtin" nullIpam "github.com/docker/docker/libnetwork/ipams/null" - remoteIpam "github.com/docker/docker/libnetwork/ipams/remote" "github.com/docker/docker/libnetwork/ipamutils" "github.com/sirupsen/logrus" ) -func initIPAMDrivers(r *drvregistry.DrvRegistry, netConfig *NetworkConfig) error { +func initIPAMDrivers(r ipamapi.Registerer, netConfig *NetworkConfig) error { var addressPool []*ipamutils.NetworkToSplit var str strings.Builder str.WriteString("Subnetlist - ") @@ -40,12 +38,11 @@ func initIPAMDrivers(r *drvregistry.DrvRegistry, netConfig *NetworkConfig) error logrus.Infof("Swarm initialized global default address pool to: " + str.String()) } - for _, fn := range [](func(ipamapi.Callback, interface{}, interface{}) error){ - builtinIpam.Init, - remoteIpam.Init, - nullIpam.Init, + for _, fn := range [](func(ipamapi.Registerer) error){ + builtinIpam.Register, + nullIpam.Register, } { - if err := fn(r, nil, nil); err != nil { + if err := fn(r); err != nil { return err } } diff --git a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_network_linux.go b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_network_linux.go index 5ae9196977..34268bfe60 100644 --- a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_network_linux.go +++ b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_network_linux.go @@ -1,22 +1,21 @@ package cnmallocator import ( + "github.com/docker/docker/libnetwork/driverapi" "github.com/docker/docker/libnetwork/drivers/bridge/brmanager" "github.com/docker/docker/libnetwork/drivers/host" "github.com/docker/docker/libnetwork/drivers/ipvlan/ivmanager" "github.com/docker/docker/libnetwork/drivers/macvlan/mvmanager" "github.com/docker/docker/libnetwork/drivers/overlay/ovmanager" - "github.com/docker/docker/libnetwork/drivers/remote" "github.com/moby/swarmkit/v2/manager/allocator/networkallocator" ) -var initializers = []initializer{ - {remote.Init, "remote"}, - {ovmanager.Init, "overlay"}, - {mvmanager.Init, "macvlan"}, - {brmanager.Init, "bridge"}, - {ivmanager.Init, "ipvlan"}, - {host.Init, "host"}, +var initializers = map[string]func(driverapi.Registerer) error{ + "overlay": ovmanager.Register, + "macvlan": mvmanager.Register, + "bridge": brmanager.Register, + "ipvlan": ivmanager.Register, + "host": host.Register, } // PredefinedNetworks returns the list of predefined network structures diff --git a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_network_windows.go b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_network_windows.go index abc6c44aac..7d4724a6d2 100644 --- a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_network_windows.go +++ b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/drivers_network_windows.go @@ -1,17 +1,16 @@ package cnmallocator import ( + "github.com/docker/docker/libnetwork/driverapi" "github.com/docker/docker/libnetwork/drivers/overlay/ovmanager" - "github.com/docker/docker/libnetwork/drivers/remote" "github.com/moby/swarmkit/v2/manager/allocator/networkallocator" ) -var initializers = []initializer{ - {remote.Init, "remote"}, - {ovmanager.Init, "overlay"}, - {StubManagerInit("internal"), "internal"}, - {StubManagerInit("l2bridge"), "l2bridge"}, - {StubManagerInit("nat"), "nat"}, +var initializers = map[string]func(driverapi.Registerer) error{ + "overlay": ovmanager.Register, + "internal": stubManager("internal"), + "l2bridge": stubManager("l2bridge"), + "nat": stubManager("nat"), } // PredefinedNetworks returns the list of predefined network structures @@ -20,3 +19,9 @@ func PredefinedNetworks() []networkallocator.PredefinedNetworkData { {Name: "nat", Driver: "nat"}, } } + +func stubManager(ntype string) func(driverapi.Registerer) error { + return func(r driverapi.Registerer) error { + return RegisterManager(r, ntype) + } +} diff --git a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/manager.go b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/manager.go index bfc0e9a7af..985f30e1f9 100644 --- a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/manager.go +++ b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/manager.go @@ -11,19 +11,12 @@ type manager struct { networkType string } -func StubManagerInit(networkType string) func(dc driverapi.DriverCallback, config map[string]interface{}) error { - return func(dc driverapi.DriverCallback, config map[string]interface{}) error { - return RegisterManager(dc, networkType) - } -} - -// Register registers a new instance of the manager driver for networkType with r. -func RegisterManager(r driverapi.DriverCallback, networkType string) error { - c := driverapi.Capability{ +// RegisterManager registers a new instance of the manager driver for networkType with r. +func RegisterManager(r driverapi.Registerer, networkType string) error { + return r.RegisterDriver(networkType, &manager{networkType: networkType}, driverapi.Capability{ DataScope: datastore.LocalScope, ConnectivityScope: datastore.LocalScope, - } - return r.RegisterDriver(networkType, &manager{networkType: networkType}, c) + }) } func (d *manager) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) { diff --git a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/networkallocator.go b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/networkallocator.go index 9aae338fa2..ee9ae9b1c1 100644 --- a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/networkallocator.go +++ b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/networkallocator.go @@ -8,8 +8,10 @@ import ( "github.com/docker/docker/libnetwork/datastore" "github.com/docker/docker/libnetwork/driverapi" + "github.com/docker/docker/libnetwork/drivers/remote" "github.com/docker/docker/libnetwork/drvregistry" "github.com/docker/docker/libnetwork/ipamapi" + remoteipam "github.com/docker/docker/libnetwork/ipams/remote" "github.com/docker/docker/libnetwork/netlabel" "github.com/docker/docker/pkg/plugingetter" "github.com/moby/swarmkit/v2/api" @@ -30,9 +32,14 @@ const ( // like managing network and IPAM drivers and also creating and // deleting networks and the associated resources. type cnmNetworkAllocator struct { - // The driver register which manages all internal and external - // IPAM and network drivers. - drvRegistry *drvregistry.DrvRegistry + // The plugin getter instance used to get network and IPAM driver plugins. + pg plugingetter.PluginGetter + + // The driver registry for all internal and external IPAM drivers. + ipamRegistry drvregistry.IPAMs + + // The driver registry for all internal and external network drivers. + networkRegistry drvregistry.Networks // The port allocator instance for allocating node ports portAllocator *portAllocator @@ -81,11 +88,6 @@ type networkDriver struct { capability *driverapi.Capability } -type initializer struct { - fn drvregistry.InitFunc - ntype string -} - // NetworkConfig is used to store network related cluster config in the Manager. type NetworkConfig struct { // DefaultAddrPool specifies default subnet pool for global scope networks @@ -106,21 +108,23 @@ func New(pg plugingetter.PluginGetter, netConfig *NetworkConfig) (networkallocat services: make(map[string]struct{}), tasks: make(map[string]struct{}), nodes: make(map[string]map[string]struct{}), + pg: pg, } - // There are no driver configurations and notification - // functions as of now. - reg, err := drvregistry.New(nil, nil, nil, nil, pg) - if err != nil { - return nil, err + for ntype, i := range initializers { + if err := i(&na.networkRegistry); err != nil { + return nil, fmt.Errorf("failed to register %q network driver: %w", ntype, err) + } + } + if err := remote.Register(&na.networkRegistry, pg); err != nil { + return nil, fmt.Errorf("failed to initialize network driver plugins: %w", err) } - if err := initializeDrivers(reg); err != nil { + if err := initIPAMDrivers(&na.ipamRegistry, netConfig); err != nil { return nil, err } - - if err = initIPAMDrivers(reg, netConfig); err != nil { - return nil, err + if err := remoteipam.Register(&na.ipamRegistry, pg); err != nil { + return nil, fmt.Errorf("failed to initialize IPAM driver plugins: %w", err) } pa, err := newPortAllocator() @@ -129,7 +133,6 @@ func New(pg plugingetter.PluginGetter, netConfig *NetworkConfig) (networkallocat } na.portAllocator = pa - na.drvRegistry = reg return na, nil } @@ -816,28 +819,27 @@ func (na *cnmNetworkAllocator) resolveDriver(n *api.Network) (*networkDriver, er dName = n.Spec.DriverConfig.Name } - d, drvcap := na.drvRegistry.Driver(dName) + d, drvcap := na.networkRegistry.Driver(dName) if d == nil { err := na.loadDriver(dName) if err != nil { return nil, err } - d, drvcap = na.drvRegistry.Driver(dName) + d, drvcap = na.networkRegistry.Driver(dName) if d == nil { return nil, fmt.Errorf("could not resolve network driver %s", dName) } } - return &networkDriver{driver: d, capability: drvcap, name: dName}, nil + return &networkDriver{driver: d, capability: &drvcap, name: dName}, nil } func (na *cnmNetworkAllocator) loadDriver(name string) error { - pg := na.drvRegistry.GetPluginGetter() - if pg == nil { + if na.pg == nil { return errors.New("plugin store is uninitialized") } - _, err := pg.Get(name, driverapi.NetworkPluginEndpointType, plugingetter.Lookup) + _, err := na.pg.Get(name, driverapi.NetworkPluginEndpointType, plugingetter.Lookup) return err } @@ -853,7 +855,7 @@ func (na *cnmNetworkAllocator) resolveIPAM(n *api.Network) (ipamapi.Ipam, string dOptions = n.Spec.IPAM.Driver.Options } - ipam, _ := na.drvRegistry.IPAM(dName) + ipam, _ := na.ipamRegistry.IPAM(dName) if ipam == nil { return nil, "", nil, fmt.Errorf("could not resolve IPAM driver %s", dName) } @@ -893,7 +895,7 @@ func (na *cnmNetworkAllocator) allocatePools(n *api.Network) (map[string]string, // We don't support user defined address spaces yet so just // retrieve default address space names for the driver. - _, asName, err := na.drvRegistry.IPAMDefaultAddressSpaces(dName) + _, asName, err := ipam.GetDefaultAddressSpaces() if err != nil { return nil, err } @@ -978,15 +980,6 @@ func (na *cnmNetworkAllocator) allocatePools(n *api.Network) (map[string]string, return pools, nil } -func initializeDrivers(reg *drvregistry.DrvRegistry) error { - for _, i := range initializers { - if err := reg.AddDriver(i.ntype, i.fn, nil); err != nil { - return err - } - } - return nil -} - func serviceNetworks(s *api.Service) []*api.NetworkAttachmentConfig { // Always prefer NetworkAttachmentConfig in the TaskSpec if len(s.Spec.Task.Networks) == 0 && len(s.Spec.Networks) != 0 { @@ -1011,12 +1004,8 @@ func (na *cnmNetworkAllocator) IsVIPOnIngressNetwork(vip *api.Endpoint_VirtualIP // IsBuiltInDriver returns whether the passed driver is an internal network driver func IsBuiltInDriver(name string) bool { n := strings.ToLower(name) - for _, d := range initializers { - if n == d.ntype { - return true - } - } - return false + _, ok := initializers[n] + return ok } // setIPAMSerialAlloc sets the ipam allocation method to serial diff --git a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/portallocator.go b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/portallocator.go index 3e5e1c4443..818613fe81 100644 --- a/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/portallocator.go +++ b/vendor/github.com/moby/swarmkit/v2/manager/allocator/cnmallocator/portallocator.go @@ -1,10 +1,8 @@ package cnmallocator import ( - "fmt" - - "github.com/docker/docker/libnetwork/idm" "github.com/moby/swarmkit/v2/api" + "github.com/moby/swarmkit/v2/internal/idm" ) const ( @@ -34,8 +32,8 @@ type portAllocator struct { type portSpace struct { protocol api.PortConfig_Protocol - masterPortSpace *idm.Idm - dynamicPortSpace *idm.Idm + masterPortSpace *idm.IDM + dynamicPortSpace *idm.IDM } type allocatedPorts map[api.PortConfig]map[uint32]*api.PortConfig @@ -118,15 +116,12 @@ func newPortAllocator() (*portAllocator, error) { } func newPortSpace(protocol api.PortConfig_Protocol) (*portSpace, error) { - masterName := fmt.Sprintf("%s-master-ports", protocol) - dynamicName := fmt.Sprintf("%s-dynamic-ports", protocol) - - master, err := idm.New(nil, masterName, masterPortStart, masterPortEnd) + master, err := idm.New(masterPortStart, masterPortEnd) if err != nil { return nil, err } - dynamic, err := idm.New(nil, dynamicName, dynamicPortStart, dynamicPortEnd) + dynamic, err := idm.New(dynamicPortStart, dynamicPortEnd) if err != nil { return nil, err } diff --git a/vendor/modules.txt b/vendor/modules.txt index 8f84462c0b..b49ab6aa5e 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -777,7 +777,7 @@ github.com/moby/patternmatcher # github.com/moby/pubsub v1.0.0 ## explicit; go 1.19 github.com/moby/pubsub -# github.com/moby/swarmkit/v2 v2.0.0-20230627115642-ad0f3ae162fa +# github.com/moby/swarmkit/v2 v2.0.0-20230707182847-6f78b8199b05 ## explicit; go 1.18 github.com/moby/swarmkit/v2/agent github.com/moby/swarmkit/v2/agent/configs @@ -798,6 +798,7 @@ github.com/moby/swarmkit/v2/ca/pkcs8 github.com/moby/swarmkit/v2/connectionbroker github.com/moby/swarmkit/v2/identity github.com/moby/swarmkit/v2/internal/csi/capability +github.com/moby/swarmkit/v2/internal/idm github.com/moby/swarmkit/v2/ioutils github.com/moby/swarmkit/v2/log github.com/moby/swarmkit/v2/manager