From cc765cc648c4bffbde03b4fe0d7e87601fa24f12 Mon Sep 17 00:00:00 2001 From: Madhu Venugopal Date: Tue, 5 Jul 2016 13:49:31 -0700 Subject: [PATCH] Moving IPAM initalization out of drvRegistry into libnetwork core Signed-off-by: Madhu Venugopal --- controller.go | 5 +++++ drivers_ipam.go | 23 +++++++++++++++++++++++ drvregistry/drvregistry.go | 22 ---------------------- drvregistry/drvregistry_test.go | 20 ++++++++++++++++++++ 4 files changed, 48 insertions(+), 22 deletions(-) create mode 100644 drivers_ipam.go diff --git a/controller.go b/controller.go index 9108d878..216f7ccd 100644 --- a/controller.go +++ b/controller.go @@ -193,6 +193,11 @@ func New(cfgOptions ...config.Option) (NetworkController, error) { return nil, err } } + + if err = initIPAMDrivers(drvRegistry, nil, c.getStore(datastore.GlobalScope)); err != nil { + return nil, err + } + c.drvRegistry = drvRegistry if c.cfg != nil && c.cfg.Cluster.Watcher != nil { diff --git a/drivers_ipam.go b/drivers_ipam.go new file mode 100644 index 00000000..be0204ab --- /dev/null +++ b/drivers_ipam.go @@ -0,0 +1,23 @@ +package libnetwork + +import ( + "github.com/docker/libnetwork/drvregistry" + "github.com/docker/libnetwork/ipamapi" + builtinIpam "github.com/docker/libnetwork/ipams/builtin" + nullIpam "github.com/docker/libnetwork/ipams/null" + remoteIpam "github.com/docker/libnetwork/ipams/remote" +) + +func initIPAMDrivers(r *drvregistry.DrvRegistry, lDs, gDs interface{}) error { + for _, fn := range [](func(ipamapi.Callback, interface{}, interface{}) error){ + builtinIpam.Init, + remoteIpam.Init, + nullIpam.Init, + } { + if err := fn(r, lDs, gDs); err != nil { + return err + } + } + + return nil +} diff --git a/drvregistry/drvregistry.go b/drvregistry/drvregistry.go index f12da15c..d2cf7811 100644 --- a/drvregistry/drvregistry.go +++ b/drvregistry/drvregistry.go @@ -8,10 +8,6 @@ import ( "github.com/docker/libnetwork/driverapi" "github.com/docker/libnetwork/ipamapi" "github.com/docker/libnetwork/types" - - builtinIpam "github.com/docker/libnetwork/ipams/builtin" - nullIpam "github.com/docker/libnetwork/ipams/null" - remoteIpam "github.com/docker/libnetwork/ipams/remote" ) type driverData struct { @@ -64,10 +60,6 @@ func New(lDs, gDs interface{}, dfn DriverNotifyFunc, ifn IPAMNotifyFunc) (*DrvRe ifn: ifn, } - if err := r.initIPAMs(lDs, gDs); err != nil { - return nil, err - } - return r, nil } @@ -157,20 +149,6 @@ func (r *DrvRegistry) IPAMDefaultAddressSpaces(name string) (string, string, err return i.defaultLocalAddressSpace, i.defaultGlobalAddressSpace, nil } -func (r *DrvRegistry) initIPAMs(lDs, gDs interface{}) error { - for _, fn := range [](func(ipamapi.Callback, interface{}, interface{}) error){ - builtinIpam.Init, - remoteIpam.Init, - nullIpam.Init, - } { - if err := fn(r, nil, gDs); err != nil { - return err - } - } - - return nil -} - // RegisterDriver registers the network driver when it gets discovered. func (r *DrvRegistry) RegisterDriver(ntype string, driver driverapi.Driver, capability driverapi.Capability) error { if strings.TrimSpace(ntype) == "" { diff --git a/drvregistry/drvregistry_test.go b/drvregistry/drvregistry_test.go index 0b77b6fe..0b1f7a68 100644 --- a/drvregistry/drvregistry_test.go +++ b/drvregistry/drvregistry_test.go @@ -9,6 +9,9 @@ import ( "github.com/docker/libnetwork/discoverapi" "github.com/docker/libnetwork/driverapi" "github.com/docker/libnetwork/ipamapi" + builtinIpam "github.com/docker/libnetwork/ipams/builtin" + nullIpam "github.com/docker/libnetwork/ipams/null" + remoteIpam "github.com/docker/libnetwork/ipams/remote" "github.com/stretchr/testify/assert" ) @@ -90,9 +93,26 @@ func getNew(t *testing.T) *DrvRegistry { t.Fatal(err) } + err = initIPAMDrivers(reg, nil, nil) + if err != nil { + t.Fatal(err) + } return reg } +func initIPAMDrivers(r *DrvRegistry, lDs, gDs interface{}) error { + for _, fn := range [](func(ipamapi.Callback, interface{}, interface{}) error){ + builtinIpam.Init, + remoteIpam.Init, + nullIpam.Init, + } { + if err := fn(r, lDs, gDs); err != nil { + return err + } + } + + return nil +} func TestNew(t *testing.T) { getNew(t) }