traefik/provider/eureka/config.go
2018-04-11 16:30:04 +02:00

58 lines
1.5 KiB
Go

package eureka
import (
"strconv"
"text/template"
"github.com/ArthurHlt/go-eureka-client/eureka"
"github.com/containous/traefik/log"
"github.com/containous/traefik/provider"
"github.com/containous/traefik/provider/label"
"github.com/containous/traefik/types"
)
// Build the configuration from Provider server
func (p *Provider) buildConfiguration(apps *eureka.Applications) (*types.Configuration, error) {
var eurekaFuncMap = template.FuncMap{
"getPort": getPort,
"getProtocol": getProtocol,
"getWeight": getWeight,
"getInstanceID": getInstanceID,
}
templateObjects := struct {
Applications []eureka.Application
}{
Applications: apps.Applications,
}
configuration, err := p.GetConfiguration("templates/eureka.tmpl", eurekaFuncMap, templateObjects)
if err != nil {
log.Error(err)
}
return configuration, nil
}
func getInstanceID(instance eureka.InstanceInfo) string {
defaultID := provider.Normalize(instance.IpAddr) + "-" + getPort(instance)
return label.GetStringValue(instance.Metadata.Map, label.TraefikBackendID, defaultID)
}
func getPort(instance eureka.InstanceInfo) string {
if instance.SecurePort.Enabled {
return strconv.Itoa(instance.SecurePort.Port)
}
return strconv.Itoa(instance.Port.Port)
}
func getProtocol(instance eureka.InstanceInfo) string {
if instance.SecurePort.Enabled {
return "https"
}
return label.DefaultProtocol
}
func getWeight(instance eureka.InstanceInfo) int {
return label.GetIntValue(instance.Metadata.Map, label.TraefikWeight, label.DefaultWeight)
}