From b35ee254c6fd47ca26c6fa1b1d14701d777c1f94 Mon Sep 17 00:00:00 2001
From: Manuel Kieweg <manuel.kieweg@h-da.de>
Date: Tue, 8 Jun 2021 15:27:27 +0200
Subject: [PATCH] bind service and config to deployment

---
 build/cd/deploy.go | 67 +++++++++++++++++++++++++---------------------
 1 file changed, 37 insertions(+), 30 deletions(-)

diff --git a/build/cd/deploy.go b/build/cd/deploy.go
index 06a8a8097..45b3b0998 100644
--- a/build/cd/deploy.go
+++ b/build/cd/deploy.go
@@ -10,7 +10,6 @@ import (
 	"github.com/spf13/viper"
 	appv1 "k8s.io/api/apps/v1"
 	corev1 "k8s.io/api/core/v1"
-	netv1 "k8s.io/api/networking/v1"
 	"k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/util/intstr"
@@ -24,6 +23,10 @@ const GRPC = 55055
 // HTTP defines the http port used by the deployment
 const HTTP = 8080
 
+var service *corev1.Service
+var deployment *appv1.Deployment
+var config *corev1.ConfigMap
+
 func main() {
 	log.SetFormatter(&log.JSONFormatter{})
 	kubeconfig, err := clientcmd.BuildConfigFromFlags("https://api.ocp.fbi.h-da.de:6443", "")
@@ -93,18 +96,17 @@ func getenv(clientset *kubernetes.Clientset, tag string) error {
 // nolint
 func create(clientset *kubernetes.Clientset, tag string) error {
 	env := "gosdn-" + tag
-	service := createService(env)
-	config := createConfigMap(env)
-	deployment := createDeployment(env, tag)
+	deployment = createDeployment(env, tag)
 	opts := metav1.CreateOptions{}
 	ctx := context.Background()
-	_, err := clientset.CoreV1().Services("cocsn").Create(ctx, service, opts)
+
+	_, err := clientset.AppsV1().Deployments("cocsn").Create(ctx, deployment, opts)
 	if err != nil {
 		switch err.(type) {
 		case *errors.StatusError:
 			if err.(*errors.StatusError).ErrStatus.Code == 409 {
-				if err := update(clientset, service, env); err != nil {
-					return err
+				if err := update(clientset, deployment, env); err != nil {
+					log.Error(err)
 				}
 			} else {
 				log.Error(err)
@@ -113,9 +115,14 @@ func create(clientset *kubernetes.Clientset, tag string) error {
 			log.Error(err)
 		}
 	} else {
-		log.Printf("service %v created", service.Name)
+		log.Printf("deployment %v created", deployment.Name)
+	}
+	deployment, err = clientset.AppsV1().Deployments("cocsn").Get(ctx, env, metav1.GetOptions{})
+	if err != nil {
+		log.Error(err)
 	}
 
+	config = createConfigMap(env)
 	_, err = clientset.CoreV1().ConfigMaps("cocsn").Create(ctx, config, opts)
 	if err != nil {
 		switch err.(type) {
@@ -133,13 +140,15 @@ func create(clientset *kubernetes.Clientset, tag string) error {
 	} else {
 		log.Printf("configMap %v created", config.Name)
 	}
-	_, err = clientset.AppsV1().Deployments("cocsn").Create(ctx, deployment, opts)
+
+	service = createService(env)
+	_, err = clientset.CoreV1().Services("cocsn").Create(ctx, service, opts)
 	if err != nil {
 		switch err.(type) {
 		case *errors.StatusError:
 			if err.(*errors.StatusError).ErrStatus.Code == 409 {
-				if err := update(clientset, deployment, env); err != nil {
-					log.Error(err)
+				if err := update(clientset, service, env); err != nil {
+					return err
 				}
 			} else {
 				log.Error(err)
@@ -148,7 +157,7 @@ func create(clientset *kubernetes.Clientset, tag string) error {
 			log.Error(err)
 		}
 	} else {
-		log.Printf("deployment %v created", deployment.Name)
+		log.Printf("service %v created", service.Name)
 	}
 	return nil
 }
@@ -170,18 +179,6 @@ func update(clientset *kubernetes.Clientset, resource metav1.Common, env string)
 			return err
 		}
 		log.Printf("service %v updated", service.Name)
-	case *netv1.Ingress:
-		ingress := resource
-		i, err := clientset.NetworkingV1().Ingresses("cocsn").Get(ctx, env, getOpts)
-		if err != nil {
-			return err
-		}
-		i.DeepCopyInto(ingress)
-		_, err = clientset.NetworkingV1().Ingresses("cocsn").Update(ctx, ingress, opts)
-		if err != nil {
-			return err
-		}
-		log.Printf("ingress %v updated", ingress.Name)
 	case *corev1.ConfigMap:
 		config := resource
 		c, err := clientset.CoreV1().ConfigMaps("cocsn").Get(ctx, env+"-config", getOpts)
@@ -234,12 +231,6 @@ func remove(clientset *kubernetes.Clientset, tag string) error {
 	} else {
 		log.Printf("deployment %v deleted", env)
 	}
-	err = clientset.NetworkingV1beta1().Ingresses("cocsn").Delete(ctx, env, opts)
-	if err != nil {
-		log.Error(err)
-	} else {
-		log.Printf("ingress %v deleted", env)
-	}
 	return err
 }
 
@@ -256,6 +247,14 @@ func createService(environment string) *corev1.Service {
 			Annotations: map[string]string{
 				"metallb.universe.tf/address-pool": "hdanet",
 			},
+			OwnerReferences: []metav1.OwnerReference{
+				{
+					APIVersion: "v1",
+					Kind:       "Deployment",
+					Name:       environment,
+					UID:        deployment.GetUID(),
+				},
+			},
 		},
 		Spec: corev1.ServiceSpec{
 			Ports: []corev1.ServicePort{
@@ -373,6 +372,14 @@ func createConfigMap(env string) *corev1.ConfigMap {
 		},
 		ObjectMeta: metav1.ObjectMeta{
 			Name: env + "-config",
+			OwnerReferences: []metav1.OwnerReference{
+				{
+					APIVersion: "v1",
+					Kind:       "Deployment",
+					Name:       env,
+					UID:        deployment.GetUID(),
+				},
+			},
 		},
 		Data: map[string]string{"gosdn.toml": "#empty"},
 	}
-- 
GitLab