metropolis/node: pretend usage of metropolis ports as node port

Without this additional change, the repair job detects that we are not
using the ports with a service. Since we are using them just not with a
service, lets just pretend to have a valid service

Change-Id: Ia226415393031761bdf1d683a8389db65f76bcec
Reviewed-on: https://review.monogon.dev/c/monogon/+/1938
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/third_party/go/patches/k8s-reserve-metropolis-ports.patch b/third_party/go/patches/k8s-reserve-metropolis-ports.patch
index 7586b10..ac201a8 100644
--- a/third_party/go/patches/k8s-reserve-metropolis-ports.patch
+++ b/third_party/go/patches/k8s-reserve-metropolis-ports.patch
@@ -1,6 +1,6 @@
 diff --git a/pkg/registry/core/service/portallocator/allocator.go b/pkg/registry/core/service/portallocator/allocator.go
 --- a/pkg/registry/core/service/portallocator/allocator.go	(revision f66044f4361b9f1f96f0053dd46cb7dce5e990a8)
-+++ b/pkg/registry/core/service/portallocator/allocator.go	(revision f42349f2a3ed203fc06462b9f28e90c0b857cb42)
++++ b/pkg/registry/core/service/portallocator/allocator.go	(revision bdd789d982712179c6a849ceed7f12e063b3fce3)
 @@ -25,6 +25,7 @@
  	"k8s.io/kubernetes/pkg/registry/core/service/allocator"
 
@@ -22,3 +22,34 @@
  	return a, err
  }
 
+diff --git a/pkg/registry/core/service/portallocator/controller/repair.go b/pkg/registry/core/service/portallocator/controller/repair.go
+--- a/pkg/registry/core/service/portallocator/controller/repair.go	(revision f66044f4361b9f1f96f0053dd46cb7dce5e990a8)
++++ b/pkg/registry/core/service/portallocator/controller/repair.go	(revision bdd789d982712179c6a849ceed7f12e063b3fce3)
+@@ -21,6 +21,8 @@
+ 	"fmt"
+ 	"time"
+
++	"source.monogon.dev/metropolis/node"
++
+ 	corev1 "k8s.io/api/core/v1"
+ 	"k8s.io/apimachinery/pkg/api/errors"
+ 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+@@ -123,6 +126,18 @@
+ 		return fmt.Errorf("unable to refresh the port block: %v", err)
+ 	}
+
++	// pretend that metropolis system ports are in use by an actual service
++	var metropolisService corev1.Service
++	for _, p := range node.SystemPorts {
++		metropolisService.Spec.Ports = append(metropolisService.Spec.Ports, corev1.ServicePort{
++			Name:     p.String(),
++			Protocol: corev1.ProtocolTCP,
++			Port:     int32(p),
++			NodePort: int32(p),
++		})
++	}
++	list.Items = append(list.Items, metropolisService)
++
+ 	rebuilt, err := portallocator.NewInMemory(c.portRange)
+ 	if err != nil {
+ 		return fmt.Errorf("unable to create port allocator: %v", err)
\ No newline at end of file