func (c *controller) RegisterDriver(networkType string, driver driverapi.Driver, capability driverapi.Capability) error { c.Lock() if !config.IsValidName(networkType) { c.Unlock() return ErrInvalidName(networkType) } if _, ok := c.drivers[networkType]; ok { c.Unlock() return driverapi.ErrActiveRegistration(networkType) } c.drivers[networkType] = &driverData{driver, capability} if c.cfg == nil { c.Unlock() return nil } opt := make(map[string]interface{}) for _, label := range c.cfg.Daemon.Labels { if strings.HasPrefix(label, netlabel.DriverPrefix+"."+networkType) { opt[netlabel.Key(label)] = netlabel.Value(label) } } if capability.DataScope == datastore.GlobalScope && c.validateGlobalStoreConfig() { opt[netlabel.KVProvider] = c.cfg.GlobalStore.Client.Provider opt[netlabel.KVProviderURL] = c.cfg.GlobalStore.Client.Address } if capability.DataScope == datastore.LocalScope { localStoreConfig := c.getLocalStoreConfig(c.cfg) opt[netlabel.KVProvider] = localStoreConfig.Client.Provider opt[netlabel.KVProviderURL] = localStoreConfig.Client.Address opt[netlabel.KVProviderConfig] = localStoreConfig.Client.Config } c.Unlock() if len(opt) != 0 { if err := driver.Config(opt); err != nil { return err } } return nil }