Moving overlay configure out of Init and into network create

Ideally, both overlay and libnetwork core must be changed to support
kv-store connection retry. But this is a stop-gap measure to unblock the
discovery related PRs.

Signed-off-by: Madhu Venugopal <madhu@docker.com>
This commit is contained in:
Madhu Venugopal 2015-09-24 19:01:15 -07:00
parent e4e77353c9
commit 7305922385
3 changed files with 17 additions and 16 deletions

View File

@ -40,6 +40,10 @@ func (d *driver) CreateNetwork(id string, option map[string]interface{}) error {
return fmt.Errorf("invalid network id") return fmt.Errorf("invalid network id")
} }
if err := d.configure(); err != nil {
return err
}
n := &network{ n := &network{
id: id, id: id,
driver: d, driver: d,

View File

@ -31,6 +31,7 @@ type driver struct {
exitCh chan chan struct{} exitCh chan chan struct{}
ifaceName string ifaceName string
neighIP string neighIP string
config map[string]interface{}
peerDb peerNetworkMap peerDb peerNetworkMap
serfInstance *serf.Serf serfInstance *serf.Serf
networks networkTable networks networkTable
@ -80,10 +81,7 @@ func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
peerDb: peerNetworkMap{ peerDb: peerNetworkMap{
mp: map[string]peerMap{}, mp: map[string]peerMap{},
}, },
} config: config,
if err := d.configure(config); err != nil {
return err
} }
return dc.RegisterDriver(networkType, d, c) 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 onceDone bool
var err error var err error
if len(option) == 0 { if len(d.config) == 0 {
return nil return nil
} }
d.Do(func() { d.Do(func() {
onceDone = true onceDone = true
if ifaceName, ok := option[netlabel.OverlayBindInterface]; ok { if ifaceName, ok := d.config[netlabel.OverlayBindInterface]; ok {
d.ifaceName = ifaceName.(string) d.ifaceName = ifaceName.(string)
} }
if neighIP, ok := option[netlabel.OverlayNeighborIP]; ok { if neighIP, ok := d.config[netlabel.OverlayNeighborIP]; ok {
d.neighIP = neighIP.(string) d.neighIP = neighIP.(string)
} }
provider, provOk := option[netlabel.KVProvider] provider, provOk := d.config[netlabel.KVProvider]
provURL, urlOk := option[netlabel.KVProviderURL] provURL, urlOk := d.config[netlabel.KVProviderURL]
if provOk && urlOk { if provOk && urlOk {
cfg := &config.DatastoreCfg{ cfg := &config.DatastoreCfg{
@ -131,7 +129,7 @@ func (d *driver) configure(option map[string]interface{}) error {
Address: provURL.(string), Address: provURL.(string),
}, },
} }
provConfig, confOk := option[netlabel.KVProviderConfig] provConfig, confOk := d.config[netlabel.KVProviderConfig]
if confOk { if confOk {
cfg.Client.Config = provConfig.(*store.Config) 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 return err
} }

View File

@ -24,6 +24,9 @@ func setupDriver(t *testing.T) *driverTester {
t.Fatal(err) t.Fatal(err)
} }
if err := dt.d.configure(); err != nil {
t.Fatal(err)
}
return dt return dt
} }
@ -78,7 +81,7 @@ func TestOverlayNilConfig(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
if err := dt.d.configure(nil); err != nil { if err := dt.d.configure(); err != nil {
t.Fatal(err) t.Fatal(err)
} }