refacto(constraint-kv): Move constraint checking out of template

This commit is contained in:
Samuel BERTHE 2016-06-21 00:58:39 +02:00 committed by Emile Vauge
parent 013808956c
commit ced69b8397
No known key found for this signature in database
GPG key ID: D808B4C167352E59
2 changed files with 16 additions and 11 deletions

View file

@ -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
}

View file

@ -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 .}}