diff --git a/provider/kv.go b/provider/kv.go index 093411652..4626473e8 100644 --- a/provider/kv.go +++ b/provider/kv.go @@ -153,11 +153,11 @@ func (provider *Kv) loadConfig() *types.Configuration { } var KvFuncMap = template.FuncMap{ - "List": provider.list, - "Get": provider.get, - "SplitGet": provider.splitGet, - "Last": provider.last, - "CheckConstraints": provider.checkConstraints, + "List": provider.list, + "ListServers": provider.listServers, + "Get": provider.get, + "SplitGet": provider.splitGet, + "Last": provider.last, } configuration, err := provider.getConfiguration("templates/kv.tmpl", KvFuncMap, templateObjects) @@ -189,6 +189,13 @@ func (provider *Kv) list(keys ...string) []string { return fun.Values(directoryKeys).([]string) } +func (provider *Kv) listServers(backend string) []string { + serverNames := provider.list(backend, "/servers/") + return fun.Filter(func(serverName string) bool { + return provider.checkConstraints(serverName, "/tags") + }, serverNames).([]string) +} + func (provider *Kv) get(defaultValue string, keys ...string) string { joinedKeys := strings.Join(keys, "") keyPair, err := provider.kvclient.Get(strings.TrimPrefix(joinedKeys, "/")) @@ -220,7 +227,7 @@ func (provider *Kv) last(key string) string { return splittedKey[len(splittedKey)-1] } -func (provider *Kv) checkConstraints(keys ...string) string { +func (provider *Kv) checkConstraints(keys ...string) bool { joinedKeys := strings.Join(keys, "") keyPair, err := provider.kvclient.Get(joinedKeys) @@ -235,7 +242,7 @@ func (provider *Kv) checkConstraints(keys ...string) string { if failingConstraint != nil { log.Debugf("Constraint %v not matching with following tags: %v", failingConstraint.String(), value) } - return "false" + return false } - return "true" + return true } diff --git a/templates/kv.tmpl b/templates/kv.tmpl index 96be0b7f9..153f12b9c 100644 --- a/templates/kv.tmpl +++ b/templates/kv.tmpl @@ -3,7 +3,7 @@ [backends]{{range $backends}} {{$backend := .}} -{{$servers := List $backend "/servers/" }} +{{$servers := ListServers $backend }} {{$circuitBreaker := Get "" . "/circuitbreaker/" "expression"}} {{with $circuitBreaker}} @@ -28,13 +28,11 @@ {{end}} {{range $servers}} -{{if ne (CheckConstraints "" . "/tags") "false"}} [backends."{{Last $backend}}".servers."{{Last .}}"] url = "{{Get "" . "/url"}}" weight = {{Get "" . "/weight"}} {{end}} {{end}} -{{end}} [frontends]{{range $frontends}} {{$frontend := Last .}}