From 7d64471e9b4390540ed5bf66d8fb76087bc85ffb Mon Sep 17 00:00:00 2001
From: jmarchel <jmarchel@7bulls.com>
Date: Mon, 22 Apr 2024 13:32:45 +0200
Subject: [PATCH] Move postgresql to separate deployment

Change-Id: Iab4b97c327be9aa93f9783b4ff1a27fd37103d26
---
 .../Chart.yaml                                |  5 --
 .../templates/_helpers.tpl                    | 14 ++++
 .../templates/deployment-postgres.yaml        | 64 +++++++++++++++++++
 .../templates/deployment.yaml                 | 13 +---
 .../values.yaml                               | 13 ++--
 5 files changed, 87 insertions(+), 22 deletions(-)
 create mode 100644 charts/nebulous-overlay-network-manager/templates/deployment-postgres.yaml

diff --git a/charts/nebulous-overlay-network-manager/Chart.yaml b/charts/nebulous-overlay-network-manager/Chart.yaml
index 6b8b804..60a4c5f 100644
--- a/charts/nebulous-overlay-network-manager/Chart.yaml
+++ b/charts/nebulous-overlay-network-manager/Chart.yaml
@@ -22,8 +22,3 @@ version: 0.1.0
 # follow Semantic Versioning. They should reflect the version the application is using.
 # It is recommended to use it with quotes.
 appVersion: "latest"
-
-dependencies:
-  - name: postgresql
-    version: 14.3.3
-    repository: https://charts.bitnami.com/bitnami
diff --git a/charts/nebulous-overlay-network-manager/templates/_helpers.tpl b/charts/nebulous-overlay-network-manager/templates/_helpers.tpl
index af90e68..7ad84b4 100644
--- a/charts/nebulous-overlay-network-manager/templates/_helpers.tpl
+++ b/charts/nebulous-overlay-network-manager/templates/_helpers.tpl
@@ -42,6 +42,15 @@ app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
 app.kubernetes.io/managed-by: {{ .Release.Service }}
 {{- end }}
 
+{{- define "nebulous-overlay-network-manager.postgresql.labels" -}}
+helm.sh/chart: {{ include "nebulous-overlay-network-manager.chart" . }}
+{{ include "nebulous-overlay-network-manager.postgresql.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
+
 {{/*
 Selector labels
 */}}
@@ -50,6 +59,11 @@ app.kubernetes.io/name: {{ include "nebulous-overlay-network-manager.name" . }}
 app.kubernetes.io/instance: {{ .Release.Name }}
 {{- end }}
 
+{{- define "nebulous-overlay-network-manager.postgresql.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "nebulous-overlay-network-manager.name" . }}-postgresql
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
 {{/*
 Create the name of the service account to use
 */}}
diff --git a/charts/nebulous-overlay-network-manager/templates/deployment-postgres.yaml b/charts/nebulous-overlay-network-manager/templates/deployment-postgres.yaml
new file mode 100644
index 0000000..99fb3ac
--- /dev/null
+++ b/charts/nebulous-overlay-network-manager/templates/deployment-postgres.yaml
@@ -0,0 +1,64 @@
+{{ if .Values.postgresql.enabled }}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: {{ include "nebulous-overlay-network-manager.fullname" . }}-postgresql
+  labels:
+    {{- include "nebulous-overlay-network-manager.postgresql.labels" . | nindent 4 }}
+spec:
+  selector:
+    matchLabels:
+      {{- include "nebulous-overlay-network-manager.postgresql.selectorLabels" . | nindent 6 }}
+  template:
+    metadata:
+      labels:
+        {{- include "nebulous-overlay-network-manager.postgresql.selectorLabels" . | nindent 8 }}
+    spec:
+      containers:
+        - name: postgresql
+          image: "{{ .Values.postgresql.image }}"
+          ports:
+            - name: postgresql
+              containerPort: {{ .Values.postgresql.port }}
+              protocol: TCP
+          env:
+            - name: POSTGRES_USER
+              value: "{{ .Values.postgresql.user }}"
+            - name: POSTGRES_PASSWORD
+              value: "{{ .Values.postgresql.password }}"
+            - name: POSTGRES_DB
+              value: "{{ .Values.postgresql.dbName }}"
+      {{- with .Values.nodeSelector }}
+      nodeSelector:
+        {{- toYaml . | nindent 8 }}
+      {{- end }}
+      {{- with .Values.affinity }}
+      affinity:
+        {{- toYaml . | nindent 8 }}
+      {{- end }}
+      {{- with .Values.tolerations }}
+      tolerations:
+        {{- toYaml . | nindent 8 }}
+      {{- end }}
+
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ include "nebulous-overlay-network-manager.fullname" . }}-postgresql
+  labels:
+    {{- include "nebulous-overlay-network-manager.postgresql.labels" . | nindent 4 }}
+spec:
+  type: ClusterIP
+  ports:
+    - port: {{ .Values.postgresql.port }}
+      targetPort: postgresql
+      protocol: TCP
+      name: postgresql
+    - port: 5050
+      targetPort: pgadmin
+      protocol: TCP
+      name: pgadmin
+  selector:
+    {{- include "nebulous-overlay-network-manager.postgresql.selectorLabels" . | nindent 4 }}
+{{ end }}
diff --git a/charts/nebulous-overlay-network-manager/templates/deployment.yaml b/charts/nebulous-overlay-network-manager/templates/deployment.yaml
index d02a584..d11bdc5 100644
--- a/charts/nebulous-overlay-network-manager/templates/deployment.yaml
+++ b/charts/nebulous-overlay-network-manager/templates/deployment.yaml
@@ -27,10 +27,6 @@ spec:
       serviceAccountName: {{ include "nebulous-overlay-network-manager.serviceAccountName" . }}
       securityContext:
         {{- toYaml .Values.podSecurityContext | nindent 8 }}
-      initContainers:
-        - name: wait-for-postgresql
-          image: docker.io/bitnami/postgresql:16.2.0-debian-12-r8
-          command: ['sh', '-c', 'until pg_isready -U postgresql -d dbname=postgres -h nebulous-overlay-network-manager-postgresql -p 5432; do echo waiting for database; sleep 2; done;']
       containers:
         - name: {{ .Chart.Name }}
           securityContext:
@@ -41,18 +37,15 @@ spec:
             - name: onm-api
               containerPort: 8082
               protocol: TCP
-            - name: pgadmin
-              containerPort: 5050
-              protocol: TCP
           resources:
             {{- toYaml .Values.resources | nindent 12 }}
           env:
             - name: POSTGRES_USER
-              value: {{ .Values.postgresql.global.postgresql.auth.username }}
+              value: {{ .Values.postgresql.user }}
             - name: POSTGRES_PASSWORD
-              value: {{ .Values.postgresql.global.postgresql.auth.password }}
+              value: {{ .Values.postgresql.password }}
             - name: POSTGRES_DB
-              value: {{ .Values.postgresql.global.postgresql.auth.database }}
+              value: {{ .Values.postgresql.database }}
             - name: POSTGRES_IP_FQDN
               value: "nebulous-overlay-network-manager-postgresql"
             - name: POSTGRES_CONNECTION_STRING
diff --git a/charts/nebulous-overlay-network-manager/values.yaml b/charts/nebulous-overlay-network-manager/values.yaml
index ef4b70f..8549524 100644
--- a/charts/nebulous-overlay-network-manager/values.yaml
+++ b/charts/nebulous-overlay-network-manager/values.yaml
@@ -84,13 +84,12 @@ tolerations: []
 affinity: {}
 
 postgresql:
-  global:
-    postgresql:
-      auth:
-        postgresPassword: "nebulous"
-        username: "postgresql"
-        password: "postgresql"
-        database: "postgres"
+  enabled: true
+  image: "docker.io/postgres:16"
+  user: "postgresql"
+  password: "postgresql"
+  dbName: "postgres"
+  port: 5432
 
 customEnv:
   WIREGUARD_NETWORK_PORTION: "192.168.55."