diff --git a/libnetwork/drivers/overlay/ov_network.go b/libnetwork/drivers/overlay/ov_network.go index 94bd9bbbfb..72a97670f4 100644 --- a/libnetwork/drivers/overlay/ov_network.go +++ b/libnetwork/drivers/overlay/ov_network.go @@ -40,6 +40,10 @@ func (d *driver) CreateNetwork(id string, option map[string]interface{}) error { return fmt.Errorf("invalid network id") } + if err := d.configure(); err != nil { + return err + } + n := &network{ id: id, driver: d, diff --git a/libnetwork/drivers/overlay/overlay.go b/libnetwork/drivers/overlay/overlay.go index c831ec0e77..245aefdafd 100644 --- a/libnetwork/drivers/overlay/overlay.go +++ b/libnetwork/drivers/overlay/overlay.go @@ -31,6 +31,7 @@ type driver struct { exitCh chan chan struct{} ifaceName string neighIP string + config map[string]interface{} peerDb peerNetworkMap serfInstance *serf.Serf networks networkTable @@ -80,10 +81,7 @@ func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { peerDb: peerNetworkMap{ mp: map[string]peerMap{}, }, - } - - if err := d.configure(config); err != nil { - return err + config: config, } return dc.RegisterDriver(networkType, d, c) @@ -102,27 +100,27 @@ func Fini(drv driverapi.Driver) { } } -func (d *driver) configure(option map[string]interface{}) error { +func (d *driver) configure() error { var onceDone bool var err error - if len(option) == 0 { + if len(d.config) == 0 { return nil } d.Do(func() { onceDone = true - if ifaceName, ok := option[netlabel.OverlayBindInterface]; ok { + if ifaceName, ok := d.config[netlabel.OverlayBindInterface]; ok { d.ifaceName = ifaceName.(string) } - if neighIP, ok := option[netlabel.OverlayNeighborIP]; ok { + if neighIP, ok := d.config[netlabel.OverlayNeighborIP]; ok { d.neighIP = neighIP.(string) } - provider, provOk := option[netlabel.KVProvider] - provURL, urlOk := option[netlabel.KVProviderURL] + provider, provOk := d.config[netlabel.KVProvider] + provURL, urlOk := d.config[netlabel.KVProviderURL] if provOk && urlOk { cfg := &config.DatastoreCfg{ @@ -131,7 +129,7 @@ func (d *driver) configure(option map[string]interface{}) error { Address: provURL.(string), }, } - provConfig, confOk := option[netlabel.KVProviderConfig] + provConfig, confOk := d.config[netlabel.KVProviderConfig] if confOk { cfg.Client.Config = provConfig.(*store.Config) } @@ -161,10 +159,6 @@ func (d *driver) configure(option map[string]interface{}) error { }) - if !onceDone { - return fmt.Errorf("config already applied to driver") - } - return err } diff --git a/libnetwork/drivers/overlay/overlay_test.go b/libnetwork/drivers/overlay/overlay_test.go index 0d8e98f1ec..2cfc4d6fb4 100644 --- a/libnetwork/drivers/overlay/overlay_test.go +++ b/libnetwork/drivers/overlay/overlay_test.go @@ -24,6 +24,9 @@ func setupDriver(t *testing.T) *driverTester { t.Fatal(err) } + if err := dt.d.configure(); err != nil { + t.Fatal(err) + } return dt } @@ -78,7 +81,7 @@ func TestOverlayNilConfig(t *testing.T) { t.Fatal(err) } - if err := dt.d.configure(nil); err != nil { + if err := dt.d.configure(); err != nil { t.Fatal(err) }