diff --git a/retrieval/discovery/marathon/marathon.go b/retrieval/discovery/marathon/marathon.go index 942362454..4c94d6a8d 100644 --- a/retrieval/discovery/marathon/marathon.go +++ b/retrieval/discovery/marathon/marathon.go @@ -216,6 +216,9 @@ func createTargetGroup(app *App) *config.TargetGroup { func targetsForApp(app *App) []model.LabelSet { targets := make([]model.LabelSet, 0, len(app.Tasks)) for _, t := range app.Tasks { + if len(t.Ports) == 0 { + continue + } target := targetForTask(&t) targets = append(targets, model.LabelSet{ model.AddressLabel: model.LabelValue(target), diff --git a/retrieval/discovery/marathon/marathon_test.go b/retrieval/discovery/marathon/marathon_test.go index 79cb53466..6400baded 100644 --- a/retrieval/discovery/marathon/marathon_test.go +++ b/retrieval/discovery/marathon/marathon_test.go @@ -175,3 +175,49 @@ func TestMarathonSDRunAndStop(t *testing.T) { t.Fatalf("Channel not closed.") } } + +func marathonTestZeroTaskPortAppList(labels map[string]string, runningTasks int) *AppList { + task := Task{ + ID: "test-task-2", + Host: "mesos-slave-2", + Ports: []uint32{}, + } + docker := DockerContainer{Image: "repo/image:tag"} + container := Container{Docker: docker} + app := App{ + ID: "test-service-zero-ports", + Tasks: []Task{task}, + RunningTasks: runningTasks, + Labels: labels, + Container: container, + } + return &AppList{ + Apps: []App{app}, + } +} + +func TestMarathonZeroTaskPorts(t *testing.T) { + ch, md := newTestDiscovery(func(url string) (*AppList, error) { + return marathonTestZeroTaskPortAppList(marathonValidLabel, 1), nil + }) + + go func() { + select { + case tgs := <-ch: + tg := tgs[0] + + if tg.Source != "test-service-zero-ports" { + t.Fatalf("Wrong target group name: %s", tg.Source) + } + if len(tg.Targets) != 0 { + t.Fatalf("Wrong number of targets: %v", tg.Targets) + } + default: + t.Fatal("Did not get a target group.") + } + }() + err := md.updateServices(context.Background(), ch) + if err != nil { + t.Fatalf("Got error: %s", err) + } +}