瀏覽代碼

Merge pull request #596 from mrjana/model

Pass down store configs to driver
Madhu Venugopal 9 年之前
父節點
當前提交
2c5c2f30e3
共有 4 個文件被更改,包括 60 次插入23 次删除
  1. 2 2
      libnetwork/cmd/ovrouter/ovrouter.go
  2. 16 9
      libnetwork/drivers.go
  3. 3 3
      libnetwork/drivers/overlay/overlay.go
  4. 39 9
      libnetwork/netlabel/labels.go

+ 2 - 2
libnetwork/cmd/ovrouter/ovrouter.go

@@ -105,10 +105,10 @@ func main() {
 		opt[netlabel.OverlayNeighborIP] = os.Args[2]
 		opt[netlabel.OverlayNeighborIP] = os.Args[2]
 	}
 	}
 	if len(os.Args) > 3 {
 	if len(os.Args) > 3 {
-		opt[netlabel.KVProvider] = os.Args[3]
+		opt[netlabel.GlobalKVProvider] = os.Args[3]
 	}
 	}
 	if len(os.Args) > 4 {
 	if len(os.Args) > 4 {
-		opt[netlabel.KVProviderURL] = os.Args[4]
+		opt[netlabel.GlobalKVProviderURL] = os.Args[4]
 	}
 	}
 
 
 	r := &router{}
 	r := &router{}

+ 16 - 9
libnetwork/drivers.go

@@ -3,7 +3,6 @@ package libnetwork
 import (
 import (
 	"strings"
 	"strings"
 
 
-	"github.com/docker/libnetwork/datastore"
 	"github.com/docker/libnetwork/driverapi"
 	"github.com/docker/libnetwork/driverapi"
 	"github.com/docker/libnetwork/ipamapi"
 	"github.com/docker/libnetwork/ipamapi"
 	builtinIpam "github.com/docker/libnetwork/ipams/builtin"
 	builtinIpam "github.com/docker/libnetwork/ipams/builtin"
@@ -33,11 +32,6 @@ func makeDriverConfig(c *controller, ntype string) map[string]interface{} {
 
 
 	config := make(map[string]interface{})
 	config := make(map[string]interface{})
 
 
-	if dcfg, ok := c.cfg.Scopes[datastore.GlobalScope]; ok && dcfg.IsValid() {
-		config[netlabel.KVProvider] = dcfg.Client.Provider
-		config[netlabel.KVProviderURL] = dcfg.Client.Address
-	}
-
 	for _, label := range c.cfg.Daemon.Labels {
 	for _, label := range c.cfg.Daemon.Labels {
 		if !strings.HasPrefix(netlabel.Key(label), netlabel.DriverPrefix+"."+ntype) {
 		if !strings.HasPrefix(netlabel.Key(label), netlabel.DriverPrefix+"."+ntype) {
 			continue
 			continue
@@ -47,12 +41,25 @@ func makeDriverConfig(c *controller, ntype string) map[string]interface{} {
 	}
 	}
 
 
 	drvCfg, ok := c.cfg.Daemon.DriverCfg[ntype]
 	drvCfg, ok := c.cfg.Daemon.DriverCfg[ntype]
-	if !ok {
+	if ok {
+		for k, v := range drvCfg.(map[string]interface{}) {
+			config[k] = v
+		}
+	}
+
+	// We don't send datastore configs to external plugins
+	if ntype == "remote" {
 		return config
 		return config
 	}
 	}
 
 
-	for k, v := range drvCfg.(map[string]interface{}) {
-		config[k] = v
+	for k, v := range c.cfg.Scopes {
+		if !v.IsValid() {
+			continue
+		}
+
+		config[netlabel.MakeKVProvider(k)] = v.Client.Provider
+		config[netlabel.MakeKVProviderURL(k)] = v.Client.Address
+		config[netlabel.MakeKVProviderConfig(k)] = v.Client.Config
 	}
 	}
 
 
 	return config
 	return config

+ 3 - 3
libnetwork/drivers/overlay/overlay.go

@@ -79,8 +79,8 @@ func (d *driver) configure() error {
 	}
 	}
 
 
 	d.once.Do(func() {
 	d.once.Do(func() {
-		provider, provOk := d.config[netlabel.KVProvider]
-		provURL, urlOk := d.config[netlabel.KVProviderURL]
+		provider, provOk := d.config[netlabel.GlobalKVProvider]
+		provURL, urlOk := d.config[netlabel.GlobalKVProviderURL]
 
 
 		if provOk && urlOk {
 		if provOk && urlOk {
 			cfg := &datastore.ScopeCfg{
 			cfg := &datastore.ScopeCfg{
@@ -89,7 +89,7 @@ func (d *driver) configure() error {
 					Address:  provURL.(string),
 					Address:  provURL.(string),
 				},
 				},
 			}
 			}
-			provConfig, confOk := d.config[netlabel.KVProviderConfig]
+			provConfig, confOk := d.config[netlabel.GlobalKVProviderConfig]
 			if confOk {
 			if confOk {
 				cfg.Client.Config = provConfig.(*store.Config)
 				cfg.Client.Config = provConfig.(*store.Config)
 			}
 			}

+ 39 - 9
libnetwork/netlabel/labels.go

@@ -9,6 +9,10 @@ const (
 	// DriverPrefix constant marks the reserved label space for libnetwork drivers
 	// DriverPrefix constant marks the reserved label space for libnetwork drivers
 	DriverPrefix = Prefix + ".driver"
 	DriverPrefix = Prefix + ".driver"
 
 
+	// DriverPrivatePrefix constant marks the reserved label space
+	// for internal libnetwork drivers
+	DriverPrivatePrefix = DriverPrefix + ".private"
+
 	// GenericData constant that helps to identify an option as a Generic constant
 	// GenericData constant that helps to identify an option as a Generic constant
 	GenericData = Prefix + ".generic"
 	GenericData = Prefix + ".generic"
 
 
@@ -24,15 +28,6 @@ const (
 	//EnableIPv6 constant represents enabling IPV6 at network level
 	//EnableIPv6 constant represents enabling IPV6 at network level
 	EnableIPv6 = Prefix + ".enable_ipv6"
 	EnableIPv6 = Prefix + ".enable_ipv6"
 
 
-	// KVProvider constant represents the KV provider backend
-	KVProvider = DriverPrefix + ".kv_provider"
-
-	// KVProviderURL constant represents the KV provider URL
-	KVProviderURL = DriverPrefix + ".kv_provider_url"
-
-	// KVProviderConfig constant represents the KV provider Config
-	KVProviderConfig = DriverPrefix + ".kv_provider_config"
-
 	// OverlayBindInterface constant represents overlay driver bind interface
 	// OverlayBindInterface constant represents overlay driver bind interface
 	OverlayBindInterface = DriverPrefix + ".overlay.bind_interface"
 	OverlayBindInterface = DriverPrefix + ".overlay.bind_interface"
 
 
@@ -43,6 +38,41 @@ const (
 	Gateway = Prefix + ".gateway"
 	Gateway = Prefix + ".gateway"
 )
 )
 
 
+var (
+	// GlobalKVProvider constant represents the KV provider backend
+	GlobalKVProvider = MakeKVProvider("global")
+
+	// GlobalKVProviderURL constant represents the KV provider URL
+	GlobalKVProviderURL = MakeKVProviderURL("global")
+
+	// GlobalKVProviderConfig constant represents the KV provider Config
+	GlobalKVProviderConfig = MakeKVProviderConfig("global")
+
+	// LocalKVProvider constant represents the KV provider backend
+	LocalKVProvider = MakeKVProvider("local")
+
+	// LocalKVProviderURL constant represents the KV provider URL
+	LocalKVProviderURL = MakeKVProviderURL("local")
+
+	// LocalKVProviderConfig constant represents the KV provider Config
+	LocalKVProviderConfig = MakeKVProviderConfig("local")
+)
+
+// MakeKVProvider returns the kvprovider label for the scope
+func MakeKVProvider(scope string) string {
+	return DriverPrivatePrefix + scope + "kv_provider"
+}
+
+// MakeKVProviderURL returns the kvprovider url label for the scope
+func MakeKVProviderURL(scope string) string {
+	return DriverPrivatePrefix + scope + "kv_provider_url"
+}
+
+// MakeKVProviderConfig returns the kvprovider config label for the scope
+func MakeKVProviderConfig(scope string) string {
+	return DriverPrivatePrefix + scope + "kv_provider_config"
+}
+
 // Key extracts the key portion of the label
 // Key extracts the key portion of the label
 func Key(label string) string {
 func Key(label string) string {
 	kv := strings.SplitN(label, "=", 2)
 	kv := strings.SplitN(label, "=", 2)