m/n/c/metrics: add node name to discovery labels

This allows for identifying the node directly without taking a detour
via its IP address.

Change-Id: Ia36ba52385292264a42f451ce2c63e9a6c76fdb6
Reviewed-on: https://review.monogon.dev/c/monogon/+/2336
Tested-by: Jenkins CI
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
diff --git a/metropolis/node/core/metrics/discovery.go b/metropolis/node/core/metrics/discovery.go
index d5a992b..ff3fcf1 100644
--- a/metropolis/node/core/metrics/discovery.go
+++ b/metropolis/node/core/metrics/discovery.go
@@ -77,6 +77,7 @@
 					"__meta_metropolis_role_kubernetes_worker":     fmt.Sprintf("%t", new.Roles.KubernetesWorker != nil),
 					"__meta_metropolis_role_kubernetes_controller": fmt.Sprintf("%t", new.Roles.KubernetesController != nil),
 					"__meta_metropolis_role_consensus_member":      fmt.Sprintf("%t", new.Roles.ConsensusMember != nil),
+					"__meta_metropolis_node":                       new.Id,
 				},
 			})
 			return nil
diff --git a/metropolis/node/core/metrics/metrics_test.go b/metropolis/node/core/metrics/metrics_test.go
index 70762e1..c946250 100644
--- a/metropolis/node/core/metrics/metrics_test.go
+++ b/metropolis/node/core/metrics/metrics_test.go
@@ -218,7 +218,7 @@
 			return fmt.Errorf("Get(%q): code %d", url, res.StatusCode)
 		}
 		body, _ := io.ReadAll(res.Body)
-		want := `[{"targets":["1.2.3.4"],"labels":{"__meta_metropolis_role_consensus_member":"true","__meta_metropolis_role_kubernetes_controller":"false","__meta_metropolis_role_kubernetes_worker":"false"}}]`
+		want := `[{"targets":["1.2.3.4"],"labels":{"__meta_metropolis_node":"metropolis-fake-1","__meta_metropolis_role_consensus_member":"true","__meta_metropolis_role_kubernetes_controller":"false","__meta_metropolis_role_kubernetes_worker":"false"}}]`
 		if !strings.Contains(string(body), want) {
 			return util.Permanent(fmt.Errorf("did not find expected value %q in %q", want, string(body)))
 		}