refactoring unique backend by route

This commit is contained in:
emile 2015-09-09 17:41:33 +02:00
parent c5a91e7d22
commit 6f8f3e449d
6 changed files with 30 additions and 46 deletions

View file

@ -15,7 +15,7 @@ type Rule struct {
}
type Route struct {
Backends []string
Backend string
Rules map[string]Rule
}

View file

@ -5,7 +5,8 @@
[routes]{{range $host, $containers := .Hosts}}
[routes.route-{{$host}}]
backends = [{{range $container := $containers}}"backend-{{getBackend $container}}",{{end}}]
{{$container := index $containers 0}}
backend = "backend-{{getBackend $container}}"
[routes.route-{{$host}}.rules.rule-host-{{$host}}]
category = "Host"
value = "{{$host}}.{{$.Domain}}"

View file

@ -1,18 +0,0 @@
[backends]
[backends.backend1]
[backends.backend1.servers.server1]
url = "http://172.17.0.2:80"
[backends.backend1.servers.server2]
url = "http://172.17.0.3:80"
[routes]
[routes.route1]
backends = ["backend1"]
[routes.route1.rules.test_zenika_1]
category = "Host"
value = "test.zenika.fr"
[routes.route2]
backends = ["backend1"]
[routes.route2.rules.test_zenika_2]
category = "Path"
value = "/test"

View file

@ -60,12 +60,10 @@
<div class="panel panel-primary">
<div class="panel-heading">{{$keyRoutes}}</div>
<div class="panel-body">
{{range $backend := $valueRoutes.Backends}}
<!--<button type="button" class="btn btn-info">{{$backend}}</button>-->
<a class="btn btn-info" role="button" data-toggle="collapse" href="#{{$backend}}" aria-expanded="false">
{{$backend}}
<!--<button type="button" class="btn btn-info">{{$valueRoutes.Backend}}</button>-->
<a class="btn btn-info" role="button" data-toggle="collapse" href="#{{$valueRoutes.Backend}}" aria-expanded="false">
{{$valueRoutes.Backend}}
</a>
{{end}}
</div>
<table class="table table-striped table-hover">
<tr>

View file

@ -33,6 +33,7 @@ var providers = []Provider{}
func main() {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
globalConfigFile := "træfik.toml"
go func() {
for {
@ -51,12 +52,16 @@ func main() {
}
}()
configuration := LoadFileConfig()
configuration := LoadFileConfig(globalConfigFile)
if (configuration.Docker != nil) {
providers = append(providers, configuration.Docker)
}
if (configuration.File != nil) {
if (len(configuration.File.Filename) == 0) {
// no filename, setting to global config file
configuration.File.Filename = globalConfigFile
}
providers = append(providers, configuration.File)
}
@ -118,23 +123,21 @@ func LoadConfig(configuration *Configuration) *mux.Router {
newRoute := newRouteReflect[0].Interface().(*mux.Route)
newRoutes = append(newRoutes, newRoute)
}
for _, backendName := range route.Backends {
if (backends[backendName] ==nil) {
log.Println("Creating backend", backendName)
lb, _ := roundrobin.New(fwd)
rb, _ := roundrobin.NewRebalancer(lb)
for serverName, server := range configuration.Backends[backendName].Servers {
log.Println("Creating server", serverName)
url, _ := url.Parse(server.Url)
rb.UpsertServer(url)
}
backends[backendName]=lb
}else {
log.Println("Reusing backend", backendName)
}
for _, route := range newRoutes {
route.Handler(handlers.CombinedLoggingHandler(os.Stdout, backends[backendName]))
if (backends[route.Backend] ==nil) {
log.Println("Creating backend", route.Backend)
lb, _ := roundrobin.New(fwd)
rb, _ := roundrobin.NewRebalancer(lb)
for serverName, server := range configuration.Backends[route.Backend].Servers {
log.Println("Creating server", serverName)
url, _ := url.Parse(server.Url)
rb.UpsertServer(url)
}
backends[route.Backend]=lb
}else {
log.Println("Reusing backend", route.Backend)
}
for _, muxRoute := range newRoutes {
muxRoute.Handler(handlers.CombinedLoggingHandler(os.Stdout, backends[route.Backend]))
}
}
return router
@ -148,9 +151,9 @@ func Invoke(any interface{}, name string, args ...interface{}) []reflect.Value {
return reflect.ValueOf(any).MethodByName(name).Call(inputs)
}
func LoadFileConfig() *FileConfiguration {
func LoadFileConfig(file string) *FileConfiguration {
configuration := new(FileConfiguration)
if _, err := toml.DecodeFile("træfik.toml", configuration); err != nil {
if _, err := toml.DecodeFile(file, configuration); err != nil {
log.Fatal("Error reading file:", err)
}
return configuration

View file

@ -22,12 +22,12 @@ address = ":8010"
[routes]
[routes.route1]
backends = ["backend1", "backend2"]
backend = "backend2"
[routes.route1.rules.test_zenika_1]
category = "Host"
value = "test.zenika.fr"
[routes.route2]
backends = ["backend1"]
backend = "backend1"
[routes.route2.rules.test_zenika_2]
category = "Path"
value = "/test"