metropolis: rename KubernetesWorker to KubernetesController, add no-op KubernetesWorker

This is in preparation for actually splitting the Kubernetes service
into a control plane and data plane / worker. The new Worker service is
a no-op: it can be enabled/disabled, but has no practical effect.

Since we plan on keeping the control plane stuff mostly as is, and add
split worker functionality as a new codebase, it makes sense to rename
the existing role to Controller, and createa brand new Worker one (to
make future diffs smaller).

Change-Id: I79de3219f3c190d38469a0a8d7371820471c100d
Reviewed-on: https://review.monogon.dev/c/monogon/+/1325
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/cli/metroctl/format.go b/metropolis/cli/metroctl/format.go
index d2c5ddf..41987ec 100644
--- a/metropolis/cli/metroctl/format.go
+++ b/metropolis/cli/metroctl/format.go
@@ -5,6 +5,8 @@
 	"io"
 	"log"
 	"os"
+	"sort"
+	"strings"
 
 	"source.monogon.dev/metropolis/node/core/identity"
 	apb "source.monogon.dev/metropolis/proto/api"
@@ -42,14 +44,18 @@
 		return err
 	}
 
-	var roles string
-	if n.Roles.KubernetesWorker != nil {
-		roles += "KubernetesWorker"
-	}
+	var roles []string
 	if n.Roles.ConsensusMember != nil {
-		roles += ",ConsensusMember"
+		roles = append(roles, "ConsensusMember")
 	}
-	if _, err := fmt.Fprintf(e.out, "\t%s", roles); err != nil {
+	if n.Roles.KubernetesController != nil {
+		roles = append(roles, "KubernetesController")
+	}
+	if n.Roles.KubernetesWorker != nil {
+		roles = append(roles, "KubernetesWorker")
+	}
+	sort.Strings(roles)
+	if _, err := fmt.Fprintf(e.out, "\t%s", strings.Join(roles, ",")); err != nil {
 		return err
 	}