vendor: github.com/moby/swarmkit/v2 v2.0.0-20230707182847-6f78b8199b05

36334ed187...6f78b8199b

Signed-off-by: Cory Snider <csnider@mirantis.com>
This commit is contained in:
Cory Snider 2023-07-07 14:48:12 -04:00
parent 7d548c6c00
commit 7366e44019
11 changed files with 140 additions and 93 deletions

View file

@ -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

View file

@ -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=

69
vendor/github.com/moby/swarmkit/v2/internal/idm/idm.go generated vendored Normal file
View file

@ -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)
}

View file

@ -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

View file

@ -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
}
}

View file

@ -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

View file

@ -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)
}
}

View file

@ -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) {

View file

@ -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

View file

@ -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
}

3
vendor/modules.txt vendored
View file

@ -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