Browse Source

Use a map for backend lookups

Dan Williams 9 years ago
parent
commit
91e784bc70
3 changed files with 16 additions and 17 deletions
  1. 1 1
      backend/alloc/alloc.go
  2. 1 1
      backend/hostgw/hostgw.go
  3. 14 15
      network/backend.go

+ 1 - 1
backend/alloc/alloc.go

@@ -16,7 +16,7 @@ type AllocBackend struct {
 	lease   *subnet.Lease
 }
 
-func New(sm subnet.Manager, network string) backend.Backend {
+func New(sm subnet.Manager, network string, config *subnet.Config) backend.Backend {
 	return &AllocBackend{
 		sm:      sm,
 		network: network,

+ 1 - 1
backend/hostgw/hostgw.go

@@ -42,7 +42,7 @@ type HostgwBackend struct {
 	rl       []netlink.Route
 }
 
-func New(sm subnet.Manager, network string) backend.Backend {
+func New(sm subnet.Manager, network string, config *subnet.Config) backend.Backend {
 	b := &HostgwBackend{
 		sm:      sm,
 		network: network,

+ 14 - 15
network/backend.go

@@ -14,21 +14,20 @@ import (
 	"github.com/coreos/flannel/subnet"
 )
 
+var backendMap = map[string]func(sm subnet.Manager, network string, config *subnet.Config) backend.Backend {
+	"udp":     udp.New,
+	"alloc":   alloc.New,
+	"host-gw": hostgw.New,
+	"vxlan":   vxlan.New,
+	"aws-vpc": awsvpc.New,
+	"gce":     gce.New,
+}
+
 func newBackend(sm subnet.Manager, network string, config *subnet.Config) (backend.Backend, error) {
-	switch strings.ToLower(config.BackendType) {
-	case "udp":
-		return udp.New(sm, network, config), nil
-	case "alloc":
-		return alloc.New(sm, network), nil
-	case "host-gw":
-		return hostgw.New(sm, network), nil
-	case "vxlan":
-		return vxlan.New(sm, network, config), nil
-	case "aws-vpc":
-		return awsvpc.New(sm, network, config), nil
-	case "gce":
-		return gce.New(sm, network, config), nil
-	default:
-		return nil, fmt.Errorf("%v: '%v': unknown backend type", network, config.BackendType)
+	betype := strings.ToLower(config.BackendType)
+	befunc, ok := backendMap[betype]
+	if !ok {
+		return nil, fmt.Errorf("%v: '%v': unknown backend type", network, betype)
 	}
+	return befunc(sm, network, config), nil
 }