1
0
Fork 0

Factorize labels

* refactor(accesslog): factorize file name.
* traefik.frontend.rule
* traefik.frontend.value
* traefik.backend.circuitbreaker.expression
* traefik.enable
* traefik.backend.loadbalancer.method
* traefik.backend.loadbalancer.sticky
* traefik.backend.maxconn.amount
* traefik.backend.maxconn.extractorfunc
* traefik.port
* traefik.tags
* traefik.backend
* traefik.weight
* traefik.domain
* traefik.protocol
* traefik.frontend.passHostHeader
* traefik.frontend.whitelistSourceRange
* traefik.frontend.priority
* traefik.frontend.entryPoints
* traefik.frontend.auth.basic
* traefik.backend.id
* traefik.backend.circuitbreaker
* traefik.frontend.rule.type
* traefik.portIndex
* refactor(docker): specific labels
* refactor(rancher): specific labels
* traefik.backend.healthcheck.*
* refactor(providers): factorize labels.
This commit is contained in:
Ludovic Fernandez 2017-07-10 16:58:12 +02:00 committed by SALLEYRON Julien
parent 2e84b1e556
commit d653a348b1
20 changed files with 390 additions and 330 deletions

View file

@ -10,13 +10,12 @@ import (
"github.com/containous/traefik/log"
"github.com/containous/traefik/safe"
"github.com/containous/traefik/types"
rancher "github.com/rancher/go-rancher/client"
)
var (
withoutPagination *rancher.ListOpts
)
const labelRancheStackServiceName = "io.rancher.stack_service.name"
var withoutPagination *rancher.ListOpts
// APIConfiguration contains configuration properties specific to the Rancher
// API provider.
@ -221,7 +220,7 @@ func parseAPISourcedRancherData(environments []*rancher.Project, services []*ran
}
for _, container := range containers {
if container.Labels["io.rancher.stack_service.name"] == rancherData.Name &&
if container.Labels[labelRancheStackServiceName] == rancherData.Name &&
containerFilter(container.Name, container.HealthState, container.State) {
rancherData.Containers = append(rancherData.Containers, container.PrimaryIpAddress)
}

View file

@ -42,35 +42,35 @@ func (r rancherData) String() string {
// Frontend Labels
func (p *Provider) getPassHostHeader(service rancherData) string {
if passHostHeader, err := getServiceLabel(service, "traefik.frontend.passHostHeader"); err == nil {
if passHostHeader, err := getServiceLabel(service, types.LabelFrontendPassHostHeader); err == nil {
return passHostHeader
}
return "true"
}
func (p *Provider) getPriority(service rancherData) string {
if priority, err := getServiceLabel(service, "traefik.frontend.priority"); err == nil {
if priority, err := getServiceLabel(service, types.LabelFrontendPriority); err == nil {
return priority
}
return "0"
}
func (p *Provider) getEntryPoints(service rancherData) []string {
if entryPoints, err := getServiceLabel(service, "traefik.frontend.entryPoints"); err == nil {
if entryPoints, err := getServiceLabel(service, types.LabelFrontendEntryPoints); err == nil {
return strings.Split(entryPoints, ",")
}
return []string{}
}
func (p *Provider) getFrontendRule(service rancherData) string {
if label, err := getServiceLabel(service, "traefik.frontend.rule"); err == nil {
if label, err := getServiceLabel(service, types.LabelFrontendRule); err == nil {
return label
}
return "Host:" + strings.ToLower(strings.Replace(service.Name, "/", ".", -1)) + "." + p.Domain
}
func (p *Provider) getBasicAuth(service rancherData) []string {
if basicAuth, err := getServiceLabel(service, "traefik.frontend.auth.basic"); err == nil {
if basicAuth, err := getServiceLabel(service, types.LabelFrontendAuthBasic); err == nil {
return strings.Split(basicAuth, ",")
}
return []string{}
@ -83,15 +83,15 @@ func (p *Provider) getFrontendName(service rancherData) string {
// Backend Labels
func (p *Provider) getLoadBalancerMethod(service rancherData) string {
if label, err := getServiceLabel(service, "traefik.backend.loadbalancer.method"); err == nil {
if label, err := getServiceLabel(service, types.LabelBackendLoadbalancerMethod); err == nil {
return label
}
return "wrr"
}
func (p *Provider) hasLoadBalancerLabel(service rancherData) bool {
_, errMethod := getServiceLabel(service, "traefik.backend.loadbalancer.method")
_, errSticky := getServiceLabel(service, "traefik.backend.loadbalancer.sticky")
_, errMethod := getServiceLabel(service, types.LabelBackendLoadbalancerMethod)
_, errSticky := getServiceLabel(service, types.LabelBackendLoadbalancerSticky)
if errMethod != nil && errSticky != nil {
return false
}
@ -99,28 +99,28 @@ func (p *Provider) hasLoadBalancerLabel(service rancherData) bool {
}
func (p *Provider) hasCircuitBreakerLabel(service rancherData) bool {
if _, err := getServiceLabel(service, "traefik.backend.circuitbreaker.expression"); err != nil {
if _, err := getServiceLabel(service, types.LabelBackendCircuitbreakerExpression); err != nil {
return false
}
return true
}
func (p *Provider) getCircuitBreakerExpression(service rancherData) string {
if label, err := getServiceLabel(service, "traefik.backend.circuitbreaker.expression"); err == nil {
if label, err := getServiceLabel(service, types.LabelBackendCircuitbreakerExpression); err == nil {
return label
}
return "NetworkErrorRatio() > 1"
}
func (p *Provider) getSticky(service rancherData) string {
if _, err := getServiceLabel(service, "traefik.backend.loadbalancer.sticky"); err == nil {
if _, err := getServiceLabel(service, types.LabelBackendLoadbalancerSticky); err == nil {
return "true"
}
return "false"
}
func (p *Provider) getBackend(service rancherData) string {
if label, err := getServiceLabel(service, "traefik.backend"); err == nil {
if label, err := getServiceLabel(service, types.LabelBackend); err == nil {
return provider.Normalize(label)
}
return provider.Normalize(service.Name)
@ -128,48 +128,48 @@ func (p *Provider) getBackend(service rancherData) string {
// General Application Stuff
func (p *Provider) getPort(service rancherData) string {
if label, err := getServiceLabel(service, "traefik.port"); err == nil {
if label, err := getServiceLabel(service, types.LabelPort); err == nil {
return label
}
return ""
}
func (p *Provider) getProtocol(service rancherData) string {
if label, err := getServiceLabel(service, "traefik.protocol"); err == nil {
if label, err := getServiceLabel(service, types.LabelProtocol); err == nil {
return label
}
return "http"
}
func (p *Provider) getWeight(service rancherData) string {
if label, err := getServiceLabel(service, "traefik.weight"); err == nil {
if label, err := getServiceLabel(service, types.LabelWeight); err == nil {
return label
}
return "0"
}
func (p *Provider) getDomain(service rancherData) string {
if label, err := getServiceLabel(service, "traefik.domain"); err == nil {
if label, err := getServiceLabel(service, types.LabelDomain); err == nil {
return label
}
return p.Domain
}
func (p *Provider) hasMaxConnLabels(service rancherData) bool {
if _, err := getServiceLabel(service, "traefik.backend.maxconn.amount"); err != nil {
if _, err := getServiceLabel(service, types.LabelBackendMaxconnAmount); err != nil {
return false
}
if _, err := getServiceLabel(service, "traefik.backend.maxconn.extractorfunc"); err != nil {
if _, err := getServiceLabel(service, types.LabelBackendMaxconnExtractorfunc); err != nil {
return false
}
return true
}
func (p *Provider) getMaxConnAmount(service rancherData) int64 {
if label, err := getServiceLabel(service, "traefik.backend.maxconn.amount"); err == nil {
if label, err := getServiceLabel(service, types.LabelBackendMaxconnAmount); err == nil {
i, errConv := strconv.ParseInt(label, 10, 64)
if errConv != nil {
log.Errorf("Unable to parse traefik.backend.maxconn.amount %s", label)
log.Errorf("Unable to parse %s %s", types.LabelBackendMaxconnAmount, label)
return math.MaxInt64
}
return i
@ -178,7 +178,7 @@ func (p *Provider) getMaxConnAmount(service rancherData) int64 {
}
func (p *Provider) getMaxConnExtractorFunc(service rancherData) string {
if label, err := getServiceLabel(service, "traefik.backend.maxconn.extractorfunc"); err == nil {
if label, err := getServiceLabel(service, types.LabelBackendMaxconnExtractorfunc); err == nil {
return label
}
return "request.host"
@ -274,7 +274,7 @@ func containerFilter(name, healthState, state string) bool {
func (p *Provider) serviceFilter(service rancherData) bool {
if service.Labels["traefik.port"] == "" {
if service.Labels[types.LabelPort] == "" {
log.Debugf("Filtering service %s without traefik.port label", service.Name)
return false
}
@ -284,7 +284,7 @@ func (p *Provider) serviceFilter(service rancherData) bool {
return false
}
constraintTags := strings.Split(service.Labels["traefik.tags"], ",")
constraintTags := strings.Split(service.Labels[types.LabelTags], ",")
if ok, failingConstraint := p.MatchConstraints(constraintTags); !ok {
if failingConstraint != nil {
log.Debugf("Filtering service %s with constraint %s", service.Name, failingConstraint.String())
@ -311,8 +311,8 @@ func (p *Provider) serviceFilter(service rancherData) bool {
func isServiceEnabled(service rancherData, exposedByDefault bool) bool {
if service.Labels["traefik.enable"] != "" {
var v = service.Labels["traefik.enable"]
if service.Labels[types.LabelEnable] != "" {
var v = service.Labels[types.LabelEnable]
return exposedByDefault && v != "false" || v == "true"
}
return exposedByDefault

View file

@ -24,7 +24,7 @@ func TestRancherServiceFilter(t *testing.T) {
{
service: rancherData{
Labels: map[string]string{
"traefik.enable": "true",
types.LabelEnable: "true",
},
Health: "healthy",
State: "active",
@ -34,8 +34,8 @@ func TestRancherServiceFilter(t *testing.T) {
{
service: rancherData{
Labels: map[string]string{
"traefik.port": "80",
"traefik.enable": "false",
types.LabelPort: "80",
types.LabelEnable: "false",
},
Health: "healthy",
State: "active",
@ -45,8 +45,8 @@ func TestRancherServiceFilter(t *testing.T) {
{
service: rancherData{
Labels: map[string]string{
"traefik.port": "80",
"traefik.enable": "true",
types.LabelPort: "80",
types.LabelEnable: "true",
},
Health: "unhealthy",
State: "active",
@ -56,9 +56,9 @@ func TestRancherServiceFilter(t *testing.T) {
{
service: rancherData{
Labels: map[string]string{
"traefik.tags": "not-cheesy",
"traefik.port": "80",
"traefik.enable": "true",
types.LabelTags: "not-cheesy",
types.LabelPort: "80",
types.LabelEnable: "true",
},
Health: "healthy",
State: "inactive",
@ -68,9 +68,9 @@ func TestRancherServiceFilter(t *testing.T) {
{
service: rancherData{
Labels: map[string]string{
"traefik.tags": "cheese",
"traefik.port": "80",
"traefik.enable": "true",
types.LabelTags: "cheese",
types.LabelPort: "80",
types.LabelEnable: "true",
},
Health: "healthy",
State: "active",
@ -80,9 +80,9 @@ func TestRancherServiceFilter(t *testing.T) {
{
service: rancherData{
Labels: map[string]string{
"traefik.tags": "cheeeeese",
"traefik.port": "80",
"traefik.enable": "true",
types.LabelTags: "cheeeeese",
types.LabelPort: "80",
types.LabelEnable: "true",
},
Health: "healthy",
State: "upgraded",
@ -92,9 +92,9 @@ func TestRancherServiceFilter(t *testing.T) {
{
service: rancherData{
Labels: map[string]string{
"traefik.tags": "chose",
"traefik.port": "80",
"traefik.enable": "true",
types.LabelTags: "chose",
types.LabelPort: "80",
types.LabelEnable: "true",
},
Health: "healthy",
State: "active",
@ -171,7 +171,7 @@ func TestRancherGetFrontendName(t *testing.T) {
service: rancherData{
Name: "test-service",
Labels: map[string]string{
"traefik.frontend.rule": "Headers:User-Agent,bat/0.1.0",
types.LabelFrontendRule: "Headers:User-Agent,bat/0.1.0",
},
},
@ -181,7 +181,7 @@ func TestRancherGetFrontendName(t *testing.T) {
service: rancherData{
Name: "test-service",
Labels: map[string]string{
"traefik.frontend.rule": "Host:foo.bar",
types.LabelFrontendRule: "Host:foo.bar",
},
},
@ -191,7 +191,7 @@ func TestRancherGetFrontendName(t *testing.T) {
service: rancherData{
Name: "test-service",
Labels: map[string]string{
"traefik.frontend.rule": "Path:/test",
types.LabelFrontendRule: "Path:/test",
},
},
@ -201,7 +201,7 @@ func TestRancherGetFrontendName(t *testing.T) {
service: rancherData{
Name: "test-service",
Labels: map[string]string{
"traefik.frontend.rule": "PathPrefix:/test2",
types.LabelFrontendRule: "PathPrefix:/test2",
},
},
@ -242,7 +242,7 @@ func TestRancherGetFrontendRule(t *testing.T) {
service: rancherData{
Name: "test-service",
Labels: map[string]string{
"traefik.frontend.rule": "Host:foo.bar.com",
types.LabelFrontendRule: "Host:foo.bar.com",
},
},
@ -252,7 +252,7 @@ func TestRancherGetFrontendRule(t *testing.T) {
service: rancherData{
Name: "test-service",
Labels: map[string]string{
"traefik.frontend.rule": "Path:/test",
types.LabelFrontendRule: "Path:/test",
},
},
@ -262,7 +262,7 @@ func TestRancherGetFrontendRule(t *testing.T) {
service: rancherData{
Name: "test-service",
Labels: map[string]string{
"traefik.frontend.rule": "PathPrefix:/test2",
types.LabelFrontendRule: "PathPrefix:/test2",
},
},
@ -297,7 +297,7 @@ func TestRancherGetBackend(t *testing.T) {
service: rancherData{
Name: "test-service",
Labels: map[string]string{
"traefik.backend": "foobar",
types.LabelBackend: "foobar",
},
},
@ -332,7 +332,7 @@ func TestRancherGetWeight(t *testing.T) {
service: rancherData{
Name: "test-service",
Labels: map[string]string{
"traefik.weight": "5",
types.LabelWeight: "5",
},
},
@ -367,7 +367,7 @@ func TestRancherGetPort(t *testing.T) {
service: rancherData{
Name: "test-service",
Labels: map[string]string{
"traefik.port": "1337",
types.LabelPort: "1337",
},
},
@ -402,7 +402,7 @@ func TestRancherGetDomain(t *testing.T) {
service: rancherData{
Name: "test-service",
Labels: map[string]string{
"traefik.domain": "foo.bar",
types.LabelDomain: "foo.bar",
},
},
@ -437,7 +437,7 @@ func TestRancherGetProtocol(t *testing.T) {
service: rancherData{
Name: "test-service",
Labels: map[string]string{
"traefik.protocol": "https",
types.LabelProtocol: "https",
},
},
@ -472,7 +472,7 @@ func TestRancherGetPassHostHeader(t *testing.T) {
service: rancherData{
Name: "test-service",
Labels: map[string]string{
"traefik.frontend.passHostHeader": "false",
types.LabelFrontendPassHostHeader: "false",
},
},
@ -541,8 +541,8 @@ func TestRancherLoadRancherConfig(t *testing.T) {
{
Name: "test/service",
Labels: map[string]string{
"traefik.port": "80",
"traefik.frontend.auth.basic": "test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/,test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0",
types.LabelPort: "80",
types.LabelFrontendAuthBasic: "test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/,test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0",
},
Health: "healthy",
Containers: []string{"127.0.0.1"},