From 1c8d3ded3d6cddc3f0ad72393b62d45df49029db Mon Sep 17 00:00:00 2001 From: Guilhem Lettron Date: Thu, 27 Oct 2016 15:49:07 +0200 Subject: [PATCH 1/3] Add name to some case to help debug --- provider/marathon_test.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/provider/marathon_test.go b/provider/marathon_test.go index b9e712ea1..fb2314cbb 100644 --- a/provider/marathon_test.go +++ b/provider/marathon_test.go @@ -371,13 +371,13 @@ func TestMarathonTaskFilter(t *testing.T) { }, { task: marathon.Task{ - AppID: "foo", + AppID: "multiple-ports", Ports: []int{80}, }, applications: &marathon.Applications{ Apps: []marathon.Application{ { - ID: "foo", + ID: "multiple-ports", Ports: []int{80, 443}, Labels: &map[string]string{}, }, @@ -388,13 +388,13 @@ func TestMarathonTaskFilter(t *testing.T) { }, { task: marathon.Task{ - AppID: "foo", + AppID: "disable", Ports: []int{80}, }, applications: &marathon.Applications{ Apps: []marathon.Application{ { - ID: "foo", + ID: "disable", Ports: []int{80}, Labels: &map[string]string{ "traefik.enable": "false", @@ -523,7 +523,7 @@ func TestMarathonTaskFilter(t *testing.T) { }, { task: marathon.Task{ - AppID: "foo", + AppID: "healthcheck-false", Ports: []int{80}, HealthCheckResults: []*marathon.HealthCheckResult{ { @@ -534,7 +534,7 @@ func TestMarathonTaskFilter(t *testing.T) { applications: &marathon.Applications{ Apps: []marathon.Application{ { - ID: "foo", + ID: "healthcheck-false", Ports: []int{80}, Labels: &map[string]string{}, HealthChecks: &[]marathon.HealthCheck{ @@ -576,13 +576,13 @@ func TestMarathonTaskFilter(t *testing.T) { }, { task: marathon.Task{ - AppID: "foo", + AppID: "single-port", Ports: []int{80}, }, applications: &marathon.Applications{ Apps: []marathon.Application{ { - ID: "foo", + ID: "single-port", Ports: []int{80}, Labels: &map[string]string{}, }, @@ -593,7 +593,7 @@ func TestMarathonTaskFilter(t *testing.T) { }, { task: marathon.Task{ - AppID: "foo", + AppID: "healthcheck-alive", Ports: []int{80}, HealthCheckResults: []*marathon.HealthCheckResult{ { @@ -604,7 +604,7 @@ func TestMarathonTaskFilter(t *testing.T) { applications: &marathon.Applications{ Apps: []marathon.Application{ { - ID: "foo", + ID: "healthcheck-alive", Ports: []int{80}, Labels: &map[string]string{}, HealthChecks: &[]marathon.HealthCheck{ @@ -677,7 +677,7 @@ func TestMarathonTaskFilter(t *testing.T) { for _, c := range cases { actual := provider.taskFilter(c.task, c.applications, c.exposedByDefault) if actual != c.expected { - t.Fatalf("expected %v, got %v", c.expected, actual) + t.Fatalf("App %s: expected %v, got %v", c.task.AppID, c.expected, actual) } } } From 5641af437e9242dce64e121eeae10e5869fd4d52 Mon Sep 17 00:00:00 2001 From: Guilhem Lettron Date: Thu, 27 Oct 2016 15:49:34 +0200 Subject: [PATCH 2/3] Use first port by default If no information is given, use first index of ports --- provider/marathon.go | 5 +---- provider/marathon_test.go | 8 ++++---- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/provider/marathon.go b/provider/marathon.go index f2ec40918..f6cc85563 100644 --- a/provider/marathon.go +++ b/provider/marathon.go @@ -219,10 +219,7 @@ func (provider *Marathon) taskFilter(task marathon.Task, applications *marathon. log.Debugf("Filtering marathon task %s specifying both traefik.portIndex and traefik.port labels", task.AppID) return false } - if portIndexLabel == "" && portValueLabel == "" && len(application.Ports) > 1 { - log.Debugf("Filtering marathon task %s with more than 1 port and no traefik.portIndex or traefik.port label", task.AppID) - return false - } + if portIndexLabel != "" { index, err := strconv.Atoi((*application.Labels)["traefik.portIndex"]) if err != nil || index < 0 || index > len(application.Ports)-1 { diff --git a/provider/marathon_test.go b/provider/marathon_test.go index fb2314cbb..6ce7c4009 100644 --- a/provider/marathon_test.go +++ b/provider/marathon_test.go @@ -372,7 +372,7 @@ func TestMarathonTaskFilter(t *testing.T) { { task: marathon.Task{ AppID: "multiple-ports", - Ports: []int{80}, + Ports: []int{80, 443}, }, applications: &marathon.Applications{ Apps: []marathon.Application{ @@ -383,7 +383,7 @@ func TestMarathonTaskFilter(t *testing.T) { }, }, }, - expected: false, + expected: true, exposedByDefault: true, }, { @@ -927,12 +927,12 @@ func TestMarathonGetPort(t *testing.T) { { applications: []marathon.Application{ { - ID: "test1", + ID: "multiple-ports-take-first", Labels: &map[string]string{}, }, }, task: marathon.Task{ - AppID: "test1", + AppID: "multiple-ports-take-first", Ports: []int{80, 443}, }, expected: "80", From 85a20b9a39321bb8929b7a0e6ee806e0bee13f6c Mon Sep 17 00:00:00 2001 From: Guilhem Lettron Date: Wed, 2 Nov 2016 17:31:27 +0100 Subject: [PATCH 3/3] Use first index for ports --- provider/docker.go | 4 ---- provider/docker_test.go | 25 +++++++++++++++++++++++-- provider/mesos.go | 4 ---- provider/mesos_test.go | 2 +- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/provider/docker.go b/provider/docker.go index cd5ddc847..faff0b6d2 100644 --- a/provider/docker.go +++ b/provider/docker.go @@ -364,10 +364,6 @@ func (provider *Docker) containerFilter(container dockerData) bool { log.Debugf("Filtering container without port and no traefik.port label %s", container.Name) return false } - if len(container.NetworkSettings.Ports) > 1 && err != nil { - log.Debugf("Filtering container with more than 1 port and no traefik.port label %s", container.Name) - return false - } if !isContainerEnabled(container, provider.ExposedByDefault) { log.Debugf("Filtering disabled container %s", container.Name) diff --git a/provider/docker_test.go b/provider/docker_test.go index 3d106bd71..1873c5d56 100644 --- a/provider/docker_test.go +++ b/provider/docker_test.go @@ -390,6 +390,27 @@ func TestDockerGetPort(t *testing.T) { }, expected: "8080", }, + { + container: docker.ContainerJSON{ + ContainerJSONBase: &docker.ContainerJSONBase{ + Name: "test-multi-ports", + }, + Config: &container.Config{ + Labels: map[string]string{ + "traefik.port": "8080", + }, + }, + NetworkSettings: &docker.NetworkSettings{ + NetworkSettingsBase: docker.NetworkSettingsBase{ + Ports: nat.PortMap{ + "8080/tcp": {}, + "80/tcp": {}, + }, + }, + }, + }, + expected: "8080", + }, } for _, e := range containers { @@ -735,7 +756,7 @@ func TestDockerTraefikFilter(t *testing.T) { { container: docker.ContainerJSON{ ContainerJSONBase: &docker.ContainerJSONBase{ - Name: "container", + Name: "container-multi-ports", }, Config: &container.Config{}, NetworkSettings: &docker.NetworkSettings{ @@ -748,7 +769,7 @@ func TestDockerTraefikFilter(t *testing.T) { }, }, exposedByDefault: true, - expected: false, + expected: true, }, { container: docker.ContainerJSON{ diff --git a/provider/mesos.go b/provider/mesos.go index 4064c1671..a99318249 100644 --- a/provider/mesos.go +++ b/provider/mesos.go @@ -212,10 +212,6 @@ func mesosTaskFilter(task state.Task, exposedByDefaultFlag bool) bool { log.Debugf("Filtering mesos task %s specifying both traefik.portIndex and traefik.port labels", task.Name) return false } - if portIndexLabel == "" && portValueLabel == "" && len(task.DiscoveryInfo.Ports.DiscoveryPorts) > 1 { - log.Debugf("Filtering mesos task %s with more than 1 port and no traefik.portIndex or traefik.port label", task.Name) - return false - } if portIndexLabel != "" { index, err := strconv.Atoi(labels(task, "traefik.portIndex")) if err != nil || index < 0 || index > len(task.DiscoveryInfo.Ports.DiscoveryPorts)-1 { diff --git a/provider/mesos_test.go b/provider/mesos_test.go index 5968db8e9..5434915b3 100644 --- a/provider/mesos_test.go +++ b/provider/mesos_test.go @@ -95,7 +95,7 @@ func TestMesosTaskFilter(t *testing.T) { setLabels("traefik.enable", "true"), discovery(setDiscoveryPorts("TCP", 80, "WEB HTTP", "TCP", 443, "WEB HTTPS")), ), - expected: false, // more than 1 discovery port but no traefik.port* label + expected: true, // Default to first index exposedByDefault: true, }, {