d478e13639
The datastore arguments to the IPAM driver Init() functions are always nil, even in Swarmkit. The only IPAM driver which consumed the datastores was builtin; all others (null, remote, windowsipam) simply ignored it. As the signatures of the IPAM driver init functions cannot be changed without breaking the Swarmkit build, they have to be left with the same signatures for the time being. Assert that nil datastores are always passed into the builtin IPAM driver's init function so that there is no ambiguity the datastores are no longer respected. Add new Register functions for the IPAM drivers which are free from the legacy baggage of the Init functions. (The legacy Init functions can be removed once Swarmkit is migrated to using the Register functions.) As the remote IPAM driver is the only one which depends on a PluginGetter, pass it in explicitly as an argument to Register. The other IPAM drivers should not be forced to depend on a GetPluginGetter() method they do not use (Interface Segregation Principle). Signed-off-by: Cory Snider <csnider@mirantis.com>
35 lines
780 B
Go
35 lines
780 B
Go
//go:build windows
|
|
// +build windows
|
|
|
|
package builtin
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/docker/docker/libnetwork/ipamapi"
|
|
"github.com/docker/docker/libnetwork/ipams/windowsipam"
|
|
)
|
|
|
|
// Init registers the built-in ipam services with libnetwork.
|
|
//
|
|
// Deprecated: use [Register].
|
|
func Init(ic ipamapi.Callback, l, g interface{}) error {
|
|
if l != nil {
|
|
return errors.New("non-nil local datastore passed to built-in ipam init")
|
|
}
|
|
|
|
if g != nil {
|
|
return errors.New("non-nil global datastore passed to built-in ipam init")
|
|
}
|
|
|
|
return Register(ic)
|
|
}
|
|
|
|
// Register registers the built-in ipam services with libnetwork.
|
|
func Register(r ipamapi.Registerer) error {
|
|
if err := registerBuiltin(r); err != nil {
|
|
return err
|
|
}
|
|
|
|
return windowsipam.Register(windowsipam.DefaultIPAM, r)
|
|
}
|