52 lines
1 KiB
Go
52 lines
1 KiB
Go
|
package marathon
|
||
|
|
||
|
import (
|
||
|
"math"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/containous/traefik/provider/label"
|
||
|
"github.com/gambol99/go-marathon"
|
||
|
)
|
||
|
|
||
|
type configuration struct {
|
||
|
Enable bool
|
||
|
Tags []string
|
||
|
Marathon specificConfiguration
|
||
|
}
|
||
|
|
||
|
type specificConfiguration struct {
|
||
|
IPAddressIdx int
|
||
|
}
|
||
|
|
||
|
func (p *Provider) getConfiguration(app marathon.Application) (configuration, error) {
|
||
|
labels := stringValueMap(app.Labels)
|
||
|
|
||
|
conf := configuration{
|
||
|
Enable: p.ExposedByDefault,
|
||
|
Tags: nil,
|
||
|
Marathon: specificConfiguration{
|
||
|
IPAddressIdx: math.MinInt32,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
err := label.Decode(labels, &conf, "traefik.marathon.", "traefik.enable", "traefik.tags")
|
||
|
if err != nil {
|
||
|
return configuration{}, err
|
||
|
}
|
||
|
|
||
|
if p.FilterMarathonConstraints && app.Constraints != nil {
|
||
|
for _, constraintParts := range *app.Constraints {
|
||
|
conf.Tags = append(conf.Tags, strings.Join(constraintParts, ":"))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return conf, nil
|
||
|
}
|
||
|
|
||
|
func stringValueMap(mp *map[string]string) map[string]string {
|
||
|
if mp != nil {
|
||
|
return *mp
|
||
|
}
|
||
|
return make(map[string]string)
|
||
|
}
|