m/n/core/mgmt: implement node-local management service

Change-Id: I1e8a8ff46d1172e00f2d991ae3cc3af1929b6e4e
Reviewed-on: https://review.monogon.dev/c/monogon/+/1428
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/node/core/roleserve/roleserve.go b/metropolis/node/core/roleserve/roleserve.go
index 0d0997d..8f9bb47 100644
--- a/metropolis/node/core/roleserve/roleserve.go
+++ b/metropolis/node/core/roleserve/roleserve.go
@@ -85,6 +85,7 @@
 	heartbeat    *workerHeartbeat
 	kubernetes   *workerKubernetes
 	rolefetch    *workerRoleFetch
+	nodeMgmt     *workerNodeMgmt
 }
 
 // New creates a Role Server services from a Config.
@@ -129,6 +130,10 @@
 		localRoles: &s.localRoles,
 	}
 
+	s.nodeMgmt = &workerNodeMgmt{
+		clusterMembership: &s.ClusterMembership,
+	}
+
 	return s
 }
 
@@ -187,6 +192,7 @@
 	supervisor.Run(ctx, "statuspush", s.statusPush.run)
 	supervisor.Run(ctx, "heartbeat", s.heartbeat.run)
 	supervisor.Run(ctx, "rolefetch", s.rolefetch.run)
+	supervisor.Run(ctx, "nodemgmt", s.nodeMgmt.run)
 	supervisor.Signal(ctx, supervisor.SignalHealthy)
 
 	<-ctx.Done()