From c6c3af8099f381cc847d40d5648b59145938aebb Mon Sep 17 00:00:00 2001 From: emile Date: Fri, 12 Feb 2016 14:45:36 +0100 Subject: [PATCH] Fix regression on marathon backend Signed-off-by: emile --- provider/marathon.go | 32 +++++++++++++++++++++----------- provider/marathon_test.go | 2 +- templates/marathon.tmpl | 4 ++-- tests/compose-marathon.yml | 1 + 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/provider/marathon.go b/provider/marathon.go index 26982e460..33c53a0b4 100644 --- a/provider/marathon.go +++ b/provider/marathon.go @@ -81,16 +81,17 @@ func (provider *Marathon) Provide(configurationChan chan<- types.ConfigMessage) func (provider *Marathon) loadMarathonConfig() *types.Configuration { var MarathonFuncMap = template.FuncMap{ - "getBackend": provider.getBackend, - "getPort": provider.getPort, - "getWeight": provider.getWeight, - "getDomain": provider.getDomain, - "getProtocol": provider.getProtocol, - "getPassHostHeader": provider.getPassHostHeader, - "getEntryPoints": provider.getEntryPoints, - "getFrontendValue": provider.getFrontendValue, - "getFrontendRule": provider.getFrontendRule, - "replace": replace, + "getBackend": provider.getBackend, + "getPort": provider.getPort, + "getWeight": provider.getWeight, + "getDomain": provider.getDomain, + "getProtocol": provider.getProtocol, + "getPassHostHeader": provider.getPassHostHeader, + "getEntryPoints": provider.getEntryPoints, + "getFrontendValue": provider.getFrontendValue, + "getFrontendRule": provider.getFrontendRule, + "getFrontendBackend": provider.getFrontendBackend, + "replace": replace, } applications, err := provider.marathonClient.Applications(nil) @@ -313,7 +314,16 @@ func (provider *Marathon) getFrontendRule(application marathon.Application) stri return "Host" } -func (provider *Marathon) getBackend(application marathon.Application) string { +func (provider *Marathon) getBackend(task marathon.Task, applications []marathon.Application) string { + application, errApp := getApplication(task, applications) + if errApp != nil { + log.Errorf("Unable to get marathon application from task %s", task.AppID) + return "" + } + return provider.getFrontendBackend(application) +} + +func (provider *Marathon) getFrontendBackend(application marathon.Application) string { if label, err := provider.getLabel(application, "traefik.backend"); err == nil { return label } diff --git a/provider/marathon_test.go b/provider/marathon_test.go index 642f28224..6227a2641 100644 --- a/provider/marathon_test.go +++ b/provider/marathon_test.go @@ -851,7 +851,7 @@ func TestMarathonGetBackend(t *testing.T) { } for _, a := range applications { - actual := provider.getBackend(a.application) + actual := provider.getFrontendBackend(a.application) if actual != a.expected { t.Fatalf("expected %q, got %q", a.expected, actual) } diff --git a/templates/marathon.tmpl b/templates/marathon.tmpl index 5558924fd..ba60b5012 100644 --- a/templates/marathon.tmpl +++ b/templates/marathon.tmpl @@ -1,13 +1,13 @@ {{$apps := .Applications}} [backends]{{range .Tasks}} - [backends.backend{{with index $apps 0 }}{{getBackend .}}{{end}}.servers.server-{{.ID | replace "." "-"}}] + [backends.backend{{getBackend . $apps}}.servers.server-{{.ID | replace "." "-"}}] url = "{{getProtocol . $apps}}://{{.Host}}:{{getPort . $apps}}" weight = {{getWeight . $apps}} {{end}} [frontends]{{range .Applications}} [frontends.frontend{{.ID | replace "/" "-"}}] - backend = "backend{{getBackend .}}" + backend = "backend{{getFrontendBackend .}}" passHostHeader = {{getPassHostHeader .}} entryPoints = [{{range getEntryPoints .}} "{{.}}", diff --git a/tests/compose-marathon.yml b/tests/compose-marathon.yml index d749fe095..722f2f91d 100644 --- a/tests/compose-marathon.yml +++ b/tests/compose-marathon.yml @@ -31,6 +31,7 @@ slave: - /usr/bin/docker:/usr/bin/docker:ro - /usr/lib/x86_64-linux-gnu/libapparmor.so.1:/usr/lib/x86_64-linux-gnu/libapparmor.so.1:ro - /var/run/docker.sock:/var/run/docker.sock + - /lib/x86_64-linux-gnu/libsystemd-journal.so.0:/lib/x86_64-linux-gnu/libsystemd-journal.so.0 marathon: image: mesosphere/marathon:v0.13.0