func (d *driver) configure() error { var err error if len(d.config) == 0 { return nil } d.Do(func() { if ifaceName, ok := d.config[netlabel.OverlayBindInterface]; ok { d.ifaceName = ifaceName.(string) } if neighIP, ok := d.config[netlabel.OverlayNeighborIP]; ok { d.neighIP = neighIP.(string) } provider, provOk := d.config[netlabel.KVProvider] provURL, urlOk := d.config[netlabel.KVProviderURL] if provOk && urlOk { cfg := &config.DatastoreCfg{ Client: config.DatastoreClientCfg{ Provider: provider.(string), Address: provURL.(string), }, } provConfig, confOk := d.config[netlabel.KVProviderConfig] if confOk { cfg.Client.Config = provConfig.(*store.Config) } d.store, err = datastore.NewDataStore(cfg) if err != nil { err = fmt.Errorf("failed to initialize data store: %v", err) return } } d.vxlanIdm, err = idm.New(d.store, "vxlan-id", vxlanIDStart, vxlanIDEnd) if err != nil { err = fmt.Errorf("failed to initialize vxlan id manager: %v", err) return } d.ipAllocator, err = idm.New(d.store, "ipam-id", 1, 0xFFFF-2) if err != nil { err = fmt.Errorf("failed to initalize ipam id manager: %v", err) return } err = d.serfInit() if err != nil { err = fmt.Errorf("initializing serf instance failed: %v", err) } }) return err }
func (d *driver) Config(option map[string]interface{}) error { var onceDone bool var err error d.Do(func() { onceDone = true if ifaceName, ok := option[netlabel.OverlayBindInterface]; ok { d.ifaceName = ifaceName.(string) } if neighIP, ok := option[netlabel.OverlayNeighborIP]; ok { d.neighIP = neighIP.(string) } provider, provOk := option[netlabel.KVProvider] provURL, urlOk := option[netlabel.KVProviderURL] if provOk && urlOk { cfg := &config.DatastoreCfg{ Client: config.DatastoreClientCfg{ Provider: provider.(string), Address: provURL.(string), }, } d.store, err = datastore.NewDataStore(cfg) if err != nil { err = fmt.Errorf("failed to initialize data store: %v", err) return } } d.vxlanIdm, err = idm.New(d.store, "vxlan-id", vxlanIDStart, vxlanIDEnd) if err != nil { err = fmt.Errorf("failed to initialize vxlan id manager: %v", err) return } d.ipAllocator, err = idm.New(d.store, "ipam-id", 1, 0xFFFF-2) if err != nil { err = fmt.Errorf("failed to initalize ipam id manager: %v", err) return } err = d.serfInit() if err != nil { err = fmt.Errorf("initializing serf instance failed: %v", err) } }) if !onceDone { return fmt.Errorf("config already applied to driver") } return err }
func (d *driver) configure() error { var err error if len(d.config) == 0 { return nil } d.once.Do(func() { provider, provOk := d.config[netlabel.KVProvider] provURL, urlOk := d.config[netlabel.KVProviderURL] if provOk && urlOk { cfg := &config.DatastoreCfg{ Client: config.DatastoreClientCfg{ Provider: provider.(string), Address: provURL.(string), }, } provConfig, confOk := d.config[netlabel.KVProviderConfig] if confOk { cfg.Client.Config = provConfig.(*store.Config) } d.store, err = datastore.NewDataStore(cfg) if err != nil { err = fmt.Errorf("failed to initialize data store: %v", err) return } } d.vxlanIdm, err = idm.New(d.store, "vxlan-id", vxlanIDStart, vxlanIDEnd) if err != nil { err = fmt.Errorf("failed to initialize vxlan id manager: %v", err) return } d.ipAllocator, err = idm.New(d.store, "ipam-id", 1, 0xFFFF-2) if err != nil { err = fmt.Errorf("failed to initalize ipam id manager: %v", err) return } }) return err }
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) if err != nil { return nil, err } dynamic, err := idm.New(nil, dynamicName, dynamicPortStart, dynamicPortEnd) if err != nil { return nil, err } return &portSpace{ protocol: protocol, masterPortSpace: master, dynamicPortSpace: dynamic, }, nil }
func newDriver(t *testing.T) *driver { d := &driver{ networks: networkTable{}, } vxlanIdm, err := idm.New(nil, "vxlan-id", vxlanIDStart, vxlanIDEnd) require.NoError(t, err) d.vxlanIdm = vxlanIdm return d }
func (d *driver) initializeVxlanIdm() error { var err error initVxlanIdm <- true defer func() { <-initVxlanIdm }() if d.vxlanIdm != nil { return nil } d.vxlanIdm, err = idm.New(d.store, "vxlan-id", vxlanIDStart, vxlanIDEnd) if err != nil { return fmt.Errorf("failed to initialize vxlan id manager: %v", err) } return nil }
// Init registers a new instance of overlay driver func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { var err error c := driverapi.Capability{ DataScope: datastore.GlobalScope, } d := &driver{ networks: networkTable{}, config: config, } d.vxlanIdm, err = idm.New(nil, "vxlan-id", 1, vxlanIDEnd) if err != nil { return fmt.Errorf("failed to initialize vxlan id manager: %v", err) } return dc.RegisterDriver(networkType, d, c) }