m/n/kubernetes: fix flake in TestAsFlags

This test was flaky due to Go's map iteration not being deterministic.
Sort the output to make sure we do not introduce unnecessary
non-determinism.

Fixes: #363
Change-Id: If70486306a809b7d33bc17206600b0f750429b7d
Reviewed-on: https://review.monogon.dev/c/monogon/+/3708
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
Tested-by: Jenkins CI
diff --git a/metropolis/node/kubernetes/feature_gates.go b/metropolis/node/kubernetes/feature_gates.go
index 9be3b35..074aecd 100644
--- a/metropolis/node/kubernetes/feature_gates.go
+++ b/metropolis/node/kubernetes/feature_gates.go
@@ -2,6 +2,7 @@
 
 import (
 	"fmt"
+	"sort"
 	"strings"
 
 	"k8s.io/component-base/featuregate"
@@ -14,10 +15,15 @@
 func (fgs featureGates) AsFlag() string {
 	var strb strings.Builder
 	strb.WriteString("--feature-gates=")
-	i := 0
-	for f, en := range fgs {
-		fmt.Fprintf(&strb, "%s=%v", string(f), en)
-		if i++; i != len(fgs) {
+	features := make([]string, 0, len(fgs))
+	for f := range fgs {
+		features = append(features, string(f))
+	}
+	// Ensure deterministic output by sorting the map keys
+	sort.Strings(features)
+	for i, f := range features {
+		fmt.Fprintf(&strb, "%s=%v", f, fgs[featuregate.Feature(f)])
+		if i+1 != len(features) {
 			strb.WriteByte(',')
 		}
 	}