metroctl: add --columns options for `node describe`

Change-Id: I58763edc25de7ac50885beb343831ae1b65ec65d
Reviewed-on: https://review.monogon.dev/c/monogon/+/3100
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
Tested-by: Jenkins CI
diff --git a/metropolis/cli/metroctl/cmd_node.go b/metropolis/cli/metroctl/cmd_node.go
index 0476d99..6273710 100644
--- a/metropolis/cli/metroctl/cmd_node.go
+++ b/metropolis/cli/metroctl/cmd_node.go
@@ -30,7 +30,7 @@
 
 var nodeDescribeCmd = &cobra.Command{
 	Short:   "Describes cluster nodes.",
-	Use:     "describe [node-id] [--filter] [--output] [--format]",
+	Use:     "describe [node-id] [--filter] [--output] [--format] [--columns]",
 	Example: "metroctl node describe metropolis-c556e31c3fa2bf0a36e9ccb9fd5d6056",
 	Run: func(cmd *cobra.Command, args []string) {
 		ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
@@ -42,7 +42,16 @@
 			log.Fatalf("While calling Management.GetNodes: %v", err)
 		}
 
-		printNodes(nodes, args, nil)
+		var columns map[string]bool
+		if flags.columns != "" {
+			columns = make(map[string]bool)
+			for _, p := range strings.Split(flags.columns, ",") {
+				p = strings.ToLower(p)
+				p = strings.TrimSpace(p)
+				columns[p] = true
+			}
+		}
+		printNodes(nodes, args, columns)
 	},
 	Args: cobra.ArbitraryArgs,
 }