From 53f73f98c71f7ef39f4398f08e48a9a2a8bf02e4 Mon Sep 17 00:00:00 2001
From: Clemens Beck <cbeck@gitlab.com>
Date: Fri, 1 Sep 2023 10:10:54 +0200
Subject: [PATCH] Fix monitoring resources create / delete loop

Metric related objects had no type information set, causing them
to be deleted at the end of the reconciliation loop.

Changelog: fixed
---
 controllers/internal/metrics.go | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/controllers/internal/metrics.go b/controllers/internal/metrics.go
index 1acc91ab7..0df110b1c 100644
--- a/controllers/internal/metrics.go
+++ b/controllers/internal/metrics.go
@@ -16,6 +16,10 @@ func PrometheusCluster(adapter gitlab.Adapter) *monitoringv1.Prometheus {
 	var replicas int32 = 2
 
 	return &monitoringv1.Prometheus{
+		TypeMeta: metav1.TypeMeta{
+			Kind:       "Prometheus",
+			APIVersion: "monitoring.coreos.com/v1",
+		},
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      "gitlab-prometheus",
 			Namespace: adapter.Name().Namespace,
@@ -43,6 +47,10 @@ func ExposePrometheusCluster(adapter gitlab.Adapter) *corev1.Service {
 	labels := ResourceLabels(adapter.Name().Name, "prometheus", GitlabType)
 
 	return &corev1.Service{
+		TypeMeta: metav1.TypeMeta{
+			Kind:       "Service",
+			APIVersion: "v1",
+		},
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      "gitlab-prometheus",
 			Namespace: adapter.Name().Namespace,
@@ -69,6 +77,10 @@ func ExporterServiceMonitor(adapter gitlab.Adapter) *monitoringv1.ServiceMonitor
 	labels := ResourceLabels(adapter.Name().Name, "gitlab-exporter", GitlabType)
 
 	return &monitoringv1.ServiceMonitor{
+		TypeMeta: metav1.TypeMeta{
+			Kind:       "ServiceMonitor",
+			APIVersion: "monitoring.coreos.com/v1",
+		},
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      labels["app.kubernetes.io/instance"],
 			Namespace: adapter.Name().Namespace,
@@ -93,6 +105,10 @@ func WebserviceServiceMonitor(adapter gitlab.Adapter) *monitoringv1.ServiceMonit
 	labels := ResourceLabels(adapter.Name().Name, "webservice", GitlabType)
 
 	return &monitoringv1.ServiceMonitor{
+		TypeMeta: metav1.TypeMeta{
+			Kind:       "ServiceMonitor",
+			APIVersion: "monitoring.coreos.com/v1",
+		},
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      labels["app.kubernetes.io/instance"],
 			Namespace: adapter.Name().Namespace,
@@ -117,6 +133,10 @@ func PostgresqlServiceMonitor(adapter gitlab.Adapter) *monitoringv1.ServiceMonit
 	labels := ResourceLabels(adapter.Name().Name, "postgresql", GitlabType)
 
 	return &monitoringv1.ServiceMonitor{
+		TypeMeta: metav1.TypeMeta{
+			Kind:       "ServiceMonitor",
+			APIVersion: "monitoring.coreos.com/v1",
+		},
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      labels["app.kubernetes.io/instance"],
 			Namespace: adapter.Name().Namespace,
@@ -141,6 +161,10 @@ func RedisServiceMonitor(adapter gitlab.Adapter) *monitoringv1.ServiceMonitor {
 	labels := ResourceLabels(adapter.Name().Name, "redis", GitlabType)
 
 	return &monitoringv1.ServiceMonitor{
+		TypeMeta: metav1.TypeMeta{
+			Kind:       "ServiceMonitor",
+			APIVersion: "monitoring.coreos.com/v1",
+		},
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      labels["app.kubernetes.io/instance"],
 			Namespace: adapter.Name().Namespace,
@@ -165,6 +189,10 @@ func GitalyServiceMonitor(adapter gitlab.Adapter) *monitoringv1.ServiceMonitor {
 	labels := ResourceLabels(adapter.Name().Name, "gitaly", GitlabType)
 
 	return &monitoringv1.ServiceMonitor{
+		TypeMeta: metav1.TypeMeta{
+			Kind:       "ServiceMonitor",
+			APIVersion: "monitoring.coreos.com/v1",
+		},
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      labels["app.kubernetes.io/instance"],
 			Namespace: adapter.Name().Namespace,
-- 
GitLab