70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
|
package eureka
|
||
|
|
||
|
import (
|
||
|
"io/ioutil"
|
||
|
"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() (*types.Configuration, error) {
|
||
|
var EurekaFuncMap = template.FuncMap{
|
||
|
"getPort": getPort,
|
||
|
"getProtocol": getProtocol,
|
||
|
"getWeight": getWeight,
|
||
|
"getInstanceID": getInstanceID,
|
||
|
}
|
||
|
|
||
|
eureka.GetLogger().SetOutput(ioutil.Discard)
|
||
|
|
||
|
client := eureka.NewClient([]string{
|
||
|
p.Endpoint,
|
||
|
})
|
||
|
|
||
|
applications, err := client.GetApplications()
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
templateObjects := struct {
|
||
|
Applications []eureka.Application
|
||
|
}{
|
||
|
applications.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) string {
|
||
|
return label.GetStringValue(instance.Metadata.Map, label.TraefikWeight, label.DefaultWeight)
|
||
|
}
|