Unverified Commit 22a1def9 authored by Simon Pasquier's avatar Simon Pasquier Committed by GitHub
Browse files

Merge pull request #5099 from prometheus/release-2.6

Merge release-2.6 to master
parents 5358f76c b639fe14
## 2.6.1 / 2019-01-15
* [BUGFIX] Azure SD: Fix discovery getting stuck sometimes. #5088
* [BUGFIX] Marathon SD: Use `Tasks.Ports` when `RequirePorts` is `false`. #5026
* [BUGFIX] Promtool: Fix "out-of-order sample" errors when testing rules. #5069
## 2.6.0 / 2018-12-17
* [CHANGE] Remove default flags from the container's entrypoint, run Prometheus from `/etc/prometheus` and symlink the storage directory to `/etc/prometheus/data`. #4976
* [CHANGE] Promtool: Remove the `update` command. #3839
* [FEATURE] Add JSON log format via the `--log.format` flag. #4876
* [FEATURE] API: Add /api/v1/labels endpoint to get all label names. #4835
......@@ -7,7 +14,6 @@
* [ENHANCEMENT] Add `prometheus_tsdb_lowest_timestamp_seconds`, `prometheus_tsdb_head_min_time_seconds` and `prometheus_tsdb_head_max_time_seconds` metrics. #4888
* [ENHANCEMENT] Add `rule_group_last_evaluation_timestamp_seconds` metric. #4852
* [ENHANCEMENT] Add `prometheus_template_text_expansion_failures_total` and `prometheus_template_text_expansions_total` metrics. #4747
* [ENHANCEMENT] Remove default flags from the container's entrypoint. #4976
* [ENHANCEMENT] Set consistent User-Agent header in outgoing requests. #4891
* [ENHANCEMENT] Azure SD: Error out at load time when authentication parameters are missing. #4907
* [ENHANCEMENT] EC2 SD: Add the machine's private DNS name to the discovery metadata. #4693
......
......@@ -395,6 +395,10 @@ func (d *Discovery) refresh() (tg *targetgroup.Group, err error) {
}
}
}
// If we get here we haven't sent anything to the channel.
// We need to send it something to release it.
ch <- target{}
}(i, vm)
}
......
......@@ -327,6 +327,7 @@ type App struct {
Container Container `json:"container"`
PortDefinitions []PortDefinition `json:"portDefinitions"`
Networks []Network `json:"networks"`
RequirePorts bool `json:"requirePorts"`
}
// isContainerNet checks if the app's first network is set to mode 'container'.
......@@ -435,7 +436,11 @@ func targetsForApp(app *App) []model.LabelSet {
for i := 0; i < len(app.PortDefinitions); i++ {
labels[i] = app.PortDefinitions[i].Labels
ports[i] = app.PortDefinitions[i].Port
// When requirePorts is false, this port becomes the 'servicePort', not the listen port.
// In this case, the port needs to be taken from the task instead of the app.
if app.RequirePorts {
ports[i] = app.PortDefinitions[i].Port
}
}
prefix = portDefinitionLabelPrefix
......@@ -456,8 +461,9 @@ func targetsForApp(app *App) []model.LabelSet {
// Iterate over the ports we gathered using one of the methods above.
for i, port := range ports {
// A zero port can appear in a portMapping, which means it is auto-generated.
// The allocated port appears at the corresponding index in the task's 'ports' array.
// A zero port here means that either the portMapping has a zero port defined,
// or there is a portDefinition with requirePorts set to false. This means the port
// is auto-generated by Mesos and needs to be looked up in the task.
if port == 0 && len(t.Ports) == len(ports) {
port = t.Ports[i]
}
......
......@@ -343,6 +343,8 @@ func marathonTestAppListWithPortDefinitions(labels map[string]string, runningTas
task = Task{
ID: "test-task-1",
Host: "mesos-slave1",
// Auto-generated ports when requirePorts is false
Ports: []uint32{1234, 5678},
}
docker = DockerContainer{
Image: "repo/image:tag",
......@@ -358,6 +360,7 @@ func marathonTestAppListWithPortDefinitions(labels map[string]string, runningTas
{Labels: make(map[string]string), Port: 31000},
{Labels: labels, Port: 32000},
},
RequirePorts: false, // default
}
)
return &AppList{
......@@ -386,7 +389,7 @@ func TestMarathonSDSendGroupWithPortDefinitions(t *testing.T) {
t.Fatalf("Wrong number of targets: %v", tg.Targets)
}
tgt := tg.Targets[0]
if tgt[model.AddressLabel] != "mesos-slave1:31000" {
if tgt[model.AddressLabel] != "mesos-slave1:1234" {
t.Fatalf("Wrong target address: %s", tgt[model.AddressLabel])
}
if tgt[model.LabelName(portMappingLabelPrefix+"prometheus")] != "" {
......@@ -396,7 +399,7 @@ func TestMarathonSDSendGroupWithPortDefinitions(t *testing.T) {
t.Fatalf("Wrong first portDefinitions label from the first port: %s", tgt[model.AddressLabel])
}
tgt = tg.Targets[1]
if tgt[model.AddressLabel] != "mesos-slave1:32000" {
if tgt[model.AddressLabel] != "mesos-slave1:5678" {
t.Fatalf("Wrong target address: %s", tgt[model.AddressLabel])
}
if tgt[model.LabelName(portMappingLabelPrefix+"prometheus")] != "" {
......@@ -410,7 +413,7 @@ func TestMarathonSDSendGroupWithPortDefinitions(t *testing.T) {
}
}
func marathonTestAppListWithPorts(labels map[string]string, runningTasks int) *AppList {
func marathonTestAppListWithPortDefinitionsRequirePorts(labels map[string]string, runningTasks int) *AppList {
var (
task = Task{
ID: "test-task-1",
......@@ -427,6 +430,11 @@ func marathonTestAppListWithPorts(labels map[string]string, runningTasks int) *A
RunningTasks: runningTasks,
Labels: labels,
Container: container,
PortDefinitions: []PortDefinition{
{Labels: make(map[string]string), Port: 31000},
{Labels: labels, Port: 32000},
},
RequirePorts: true,
}
)
return &AppList{
......@@ -434,11 +442,11 @@ func marathonTestAppListWithPorts(labels map[string]string, runningTasks int) *A
}
}
func TestMarathonSDSendGroupWithPorts(t *testing.T) {
func TestMarathonSDSendGroupWithPortDefinitionsRequirePorts(t *testing.T) {
var (
ch = make(chan []*targetgroup.Group, 1)
client = func(client *http.Client, url string) (*AppList, error) {
return marathonTestAppListWithPorts(marathonValidLabel, 1), nil
return marathonTestAppListWithPortDefinitionsRequirePorts(marathonValidLabel, 1), nil
}
)
if err := testUpdateServices(client, ch); err != nil {
......@@ -471,7 +479,7 @@ func TestMarathonSDSendGroupWithPorts(t *testing.T) {
if tgt[model.LabelName(portMappingLabelPrefix+"prometheus")] != "" {
t.Fatalf("Wrong portMappings label from the second port: %s", tgt[model.AddressLabel])
}
if tgt[model.LabelName(portDefinitionLabelPrefix+"prometheus")] != "" {
if tgt[model.LabelName(portDefinitionLabelPrefix+"prometheus")] != "yes" {
t.Fatalf("Wrong portDefinitions label from the second port: %s", tgt[model.AddressLabel])
}
default:
......@@ -479,27 +487,18 @@ func TestMarathonSDSendGroupWithPorts(t *testing.T) {
}
}
func marathonTestAppListWithContainerPortMappings(labels map[string]string, runningTasks int) *AppList {
func marathonTestAppListWithPorts(labels map[string]string, runningTasks int) *AppList {
var (
task = Task{
ID: "test-task-1",
Host: "mesos-slave1",
Ports: []uint32{
12345, // 'Automatically-generated' port
32000,
},
ID: "test-task-1",
Host: "mesos-slave1",
Ports: []uint32{31000, 32000},
}
docker = DockerContainer{
Image: "repo/image:tag",
}
container = Container{
Docker: docker,
PortMappings: []PortMapping{
{Labels: labels, HostPort: 0},
{Labels: make(map[string]string), HostPort: 32000},
},
}
app = App{
container = Container{Docker: docker}
app = App{
ID: "test-service",
Tasks: []Task{task},
RunningTasks: runningTasks,
......@@ -512,11 +511,11 @@ func marathonTestAppListWithContainerPortMappings(labels map[string]string, runn
}
}
func TestMarathonSDSendGroupWithContainerPortMappings(t *testing.T) {
func TestMarathonSDSendGroupWithPorts(t *testing.T) {
var (
ch = make(chan []*targetgroup.Group, 1)
client = func(client *http.Client, url string) (*AppList, error) {
return marathonTestAppListWithContainerPortMappings(marathonValidLabel, 1), nil
return marathonTestAppListWithPorts(marathonValidLabel, 1), nil
}
)
if err := testUpdateServices(client, ch); err != nil {
......@@ -533,10 +532,10 @@ func TestMarathonSDSendGroupWithContainerPortMappings(t *testing.T) {
t.Fatalf("Wrong number of targets: %v", tg.Targets)
}
tgt := tg.Targets[0]
if tgt[model.AddressLabel] != "mesos-slave1:12345" {
if tgt[model.AddressLabel] != "mesos-slave1:31000" {
t.Fatalf("Wrong target address: %s", tgt[model.AddressLabel])
}
if tgt[model.LabelName(portMappingLabelPrefix+"prometheus")] != "yes" {
if tgt[model.LabelName(portMappingLabelPrefix+"prometheus")] != "" {
t.Fatalf("Wrong first portMappings label from the first port: %s", tgt[model.AddressLabel])
}
if tgt[model.LabelName(portDefinitionLabelPrefix+"prometheus")] != "" {
......@@ -557,25 +556,25 @@ func TestMarathonSDSendGroupWithContainerPortMappings(t *testing.T) {
}
}
func marathonTestAppListWithDockerContainerPortMappings(labels map[string]string, runningTasks int) *AppList {
func marathonTestAppListWithContainerPortMappings(labels map[string]string, runningTasks int) *AppList {
var (
task = Task{
ID: "test-task-1",
Host: "mesos-slave1",
Ports: []uint32{
31000,
12345, // 'Automatically-generated' port
32000,
},
}
docker = DockerContainer{
Image: "repo/image:tag",
PortMappings: []PortMapping{
{Labels: labels, HostPort: 31000},
{Labels: make(map[string]string), HostPort: 0},
},
}
container = Container{
Docker: docker,
PortMappings: []PortMapping{
{Labels: labels, HostPort: 0},
{Labels: make(map[string]string), HostPort: 32000},
},
}
app = App{
ID: "test-service",
......@@ -590,11 +589,11 @@ func marathonTestAppListWithDockerContainerPortMappings(labels map[string]string
}
}
func TestMarathonSDSendGroupWithDockerContainerPortMappings(t *testing.T) {
func TestMarathonSDSendGroupWithContainerPortMappings(t *testing.T) {
var (
ch = make(chan []*targetgroup.Group, 1)
client = func(client *http.Client, url string) (*AppList, error) {
return marathonTestAppListWithDockerContainerPortMappings(marathonValidLabel, 1), nil
return marathonTestAppListWithContainerPortMappings(marathonValidLabel, 1), nil
}
)
if err := testUpdateServices(client, ch); err != nil {
......@@ -611,7 +610,7 @@ func TestMarathonSDSendGroupWithDockerContainerPortMappings(t *testing.T) {
t.Fatalf("Wrong number of targets: %v", tg.Targets)
}
tgt := tg.Targets[0]
if tgt[model.AddressLabel] != "mesos-slave1:31000" {
if tgt[model.AddressLabel] != "mesos-slave1:12345" {
t.Fatalf("Wrong target address: %s", tgt[model.AddressLabel])
}
if tgt[model.LabelName(portMappingLabelPrefix+"prometheus")] != "yes" {
......@@ -621,7 +620,7 @@ func TestMarathonSDSendGroupWithDockerContainerPortMappings(t *testing.T) {
t.Fatalf("Wrong first portDefinitions label from the first port: %s", tgt[model.AddressLabel])
}
tgt = tg.Targets[1]
if tgt[model.AddressLabel] != "mesos-slave1:12345" {
if tgt[model.AddressLabel] != "mesos-slave1:32000" {
t.Fatalf("Wrong target address: %s", tgt[model.AddressLabel])
}
if tgt[model.LabelName(portMappingLabelPrefix+"prometheus")] != "" {
......@@ -635,28 +634,25 @@ func TestMarathonSDSendGroupWithDockerContainerPortMappings(t *testing.T) {
}
}
func marathonTestAppListWithContainerNetworkAndPortMappings(labels map[string]string, runningTasks int) *AppList {
func marathonTestAppListWithDockerContainerPortMappings(labels map[string]string, runningTasks int) *AppList {
var (
task = Task{
ID: "test-task-1",
Host: "mesos-slave1",
IPAddresses: []IPAddress{
{Address: "1.2.3.4"},
Ports: []uint32{
31000,
12345, // 'Automatically-generated' port
},
}
docker = DockerContainer{
Image: "repo/image:tag",
}
portMappings = []PortMapping{
{Labels: labels, ContainerPort: 8080, HostPort: 31000},
{Labels: make(map[string]string), ContainerPort: 1234, HostPort: 32000},
PortMappings: []PortMapping{
{Labels: labels, HostPort: 31000},
{Labels: make(map[string]string), HostPort: 0},
},
}
container = Container{
Docker: docker,
PortMappings: portMappings,
}
networks = []Network{
{Mode: "container", Name: "test-network"},
Docker: docker,
}
app = App{
ID: "test-service",
......@@ -664,7 +660,6 @@ func marathonTestAppListWithContainerNetworkAndPortMappings(labels map[string]st
RunningTasks: runningTasks,
Labels: labels,
Container: container,
Networks: networks,
}
)
return &AppList{
......@@ -672,11 +667,11 @@ func marathonTestAppListWithContainerNetworkAndPortMappings(labels map[string]st
}
}
func TestMarathonSDSendGroupWithContainerNetworkAndPortMapping(t *testing.T) {
func TestMarathonSDSendGroupWithDockerContainerPortMappings(t *testing.T) {
var (
ch = make(chan []*targetgroup.Group, 1)
client = func(client *http.Client, url string) (*AppList, error) {
return marathonTestAppListWithContainerNetworkAndPortMappings(marathonValidLabel, 1), nil
return marathonTestAppListWithDockerContainerPortMappings(marathonValidLabel, 1), nil
}
)
if err := testUpdateServices(client, ch); err != nil {
......@@ -693,7 +688,7 @@ func TestMarathonSDSendGroupWithContainerNetworkAndPortMapping(t *testing.T) {
t.Fatalf("Wrong number of targets: %v", tg.Targets)
}
tgt := tg.Targets[0]
if tgt[model.AddressLabel] != "1.2.3.4:8080" {
if tgt[model.AddressLabel] != "mesos-slave1:31000" {
t.Fatalf("Wrong target address: %s", tgt[model.AddressLabel])
}
if tgt[model.LabelName(portMappingLabelPrefix+"prometheus")] != "yes" {
......@@ -703,7 +698,7 @@ func TestMarathonSDSendGroupWithContainerNetworkAndPortMapping(t *testing.T) {
t.Fatalf("Wrong first portDefinitions label from the first port: %s", tgt[model.AddressLabel])
}
tgt = tg.Targets[1]
if tgt[model.AddressLabel] != "1.2.3.4:1234" {
if tgt[model.AddressLabel] != "mesos-slave1:12345" {
t.Fatalf("Wrong target address: %s", tgt[model.AddressLabel])
}
if tgt[model.LabelName(portMappingLabelPrefix+"prometheus")] != "" {
......@@ -717,7 +712,7 @@ func TestMarathonSDSendGroupWithContainerNetworkAndPortMapping(t *testing.T) {
}
}
func marathonTestAppListWithContainerNetworkAndPortDefinition(labels map[string]string, runningTasks int) *AppList {
func marathonTestAppListWithContainerNetworkAndPortMappings(labels map[string]string, runningTasks int) *AppList {
var (
task = Task{
ID: "test-task-1",
......@@ -729,24 +724,24 @@ func marathonTestAppListWithContainerNetworkAndPortDefinition(labels map[string]
docker = DockerContainer{
Image: "repo/image:tag",
}
portDefinitions = []PortDefinition{
{Labels: labels, Port: 8080},
{Labels: make(map[string]string), Port: 1234},
portMappings = []PortMapping{
{Labels: labels, ContainerPort: 8080, HostPort: 31000},
{Labels: make(map[string]string), ContainerPort: 1234, HostPort: 32000},
}
container = Container{
Docker: docker,
Docker: docker,
PortMappings: portMappings,
}
networks = []Network{
{Mode: "container", Name: "test-network"},
}
app = App{
ID: "test-service",
Tasks: []Task{task},
RunningTasks: runningTasks,
Labels: labels,
Container: container,
Networks: networks,
PortDefinitions: portDefinitions,
ID: "test-service",
Tasks: []Task{task},
RunningTasks: runningTasks,
Labels: labels,
Container: container,
Networks: networks,
}
)
return &AppList{
......@@ -754,11 +749,11 @@ func marathonTestAppListWithContainerNetworkAndPortDefinition(labels map[string]
}
}
func TestMarathonSDSendGroupWithContainerNetworkAndPortDefinition(t *testing.T) {
func TestMarathonSDSendGroupWithContainerNetworkAndPortMapping(t *testing.T) {
var (
ch = make(chan []*targetgroup.Group, 1)
client = func(client *http.Client, url string) (*AppList, error) {
return marathonTestAppListWithContainerNetworkAndPortDefinition(marathonValidLabel, 1), nil
return marathonTestAppListWithContainerNetworkAndPortMappings(marathonValidLabel, 1), nil
}
)
if err := testUpdateServices(client, ch); err != nil {
......@@ -778,10 +773,10 @@ func TestMarathonSDSendGroupWithContainerNetworkAndPortDefinition(t *testing.T)
if tgt[model.AddressLabel] != "1.2.3.4:8080" {
t.Fatalf("Wrong target address: %s", tgt[model.AddressLabel])
}
if tgt[model.LabelName(portMappingLabelPrefix+"prometheus")] != "" {
if tgt[model.LabelName(portMappingLabelPrefix+"prometheus")] != "yes" {
t.Fatalf("Wrong first portMappings label from the first port: %s", tgt[model.AddressLabel])
}
if tgt[model.LabelName(portDefinitionLabelPrefix+"prometheus")] != "yes" {
if tgt[model.LabelName(portDefinitionLabelPrefix+"prometheus")] != "" {
t.Fatalf("Wrong first portDefinitions label from the first port: %s", tgt[model.AddressLabel])
}
tgt = tg.Targets[1]
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment