From 8800eaa815eb646ffdd6e47e46ee7a603ac37c96 Mon Sep 17 00:00:00 2001
From: Shiva Rakshith <80666319+shiva-rakshith@users.noreply.github.com>
Date: Tue, 20 Jul 2021 20:24:09 +0530
Subject: [PATCH] SB-25552 - UCI odk deployment (#2726)

UCI ODK Heml Chart
---
 ansible/roles/stack-sunbird/defaults/main.yml | 23 ++++++-
 ansible/roles/stack-sunbird/templates/odk.env |  7 +++
 kubernetes/helm_charts/core/odk/Chart.yaml    |  5 ++
 .../core/odk/templates/deployment.yaml        | 62 +++++++++++++++++++
 .../helm_charts/core/odk/templates/hpa.yaml   | 27 ++++++++
 kubernetes/helm_charts/core/odk/values.j2     | 35 +++++++++++
 6 files changed, 158 insertions(+), 1 deletion(-)
 create mode 100644 ansible/roles/stack-sunbird/templates/odk.env
 create mode 100644 kubernetes/helm_charts/core/odk/Chart.yaml
 create mode 100644 kubernetes/helm_charts/core/odk/templates/deployment.yaml
 create mode 100644 kubernetes/helm_charts/core/odk/templates/hpa.yaml
 create mode 100644 kubernetes/helm_charts/core/odk/values.j2

diff --git a/ansible/roles/stack-sunbird/defaults/main.yml b/ansible/roles/stack-sunbird/defaults/main.yml
index 2ae7d0ee9..5ca7264e4 100644
--- a/ansible/roles/stack-sunbird/defaults/main.yml
+++ b/ansible/roles/stack-sunbird/defaults/main.yml
@@ -275,7 +275,8 @@ service_env:
     - ../../../../ansible/roles/stack-sunbird/templates/outbound_logback.xml
   transformer:
     - ../../../../ansible/roles/stack-sunbird/templates/transformer.env
-    - ../../../../ansible/roles/stack-sunbird/templates/transformer_industry_feedback.xml
+    - ../../../../ansible/roles/stack-sunbird/templates/transformer_industry_feedback.xml   
+  odk: ../../../../ansible/roles/stack-sunbird/templates/odk.env
   orchestrator:
     - ../../../../ansible/roles/stack-sunbird/templates/orchestrator.env
 
@@ -890,6 +891,26 @@ uci_orchestrator_liveness_readiness:
     timeoutSeconds: 5
     failureThreshold: 2
 
+uci_odk_liveness_readiness:
+  healthcheck: true
+  readinessProbe:
+    httpGet:
+      path: /service/health
+      port: 8080
+    initialDelaySeconds: 15
+    periodSeconds: 15
+    timeoutSeconds: 5
+    failureThreshold: 2
+    successThreshold: 1
+  livenessProbe:
+    httpGet:
+      path: /service/health
+      port: 8080
+    initialDelaySeconds: 15
+    periodSeconds: 15
+    timeoutSeconds: 5
+    failureThreshold: 2
+
 adminutil__access_keyprefix: "access"
 adminutil__access_keystart: 0
 adminutil__access_keycount: 0
diff --git a/ansible/roles/stack-sunbird/templates/odk.env b/ansible/roles/stack-sunbird/templates/odk.env
new file mode 100644
index 000000000..992e775f9
--- /dev/null
+++ b/ansible/roles/stack-sunbird/templates/odk.env
@@ -0,0 +1,7 @@
+DB_URL=jdbc:postgres://{{uci_postgres_host}}:5432/{{uci_odk_postgres_database}}?user={{uci_postgres_user}}&password={{uci_postgres_password}}&sslmode=require
+DB_RESOURCE_NAME=jdbc/{{uci_odk_postgres_database}}
+DB_USERNAME={{uci_postgres_user}}
+DB_PASSWORD={{uci_postgres_password}}
+DB_SCHEMA=aggregate
+DB_NAME={{uci_odk_postgres_database}}
+DB_PORT=5432
\ No newline at end of file
diff --git a/kubernetes/helm_charts/core/odk/Chart.yaml b/kubernetes/helm_charts/core/odk/Chart.yaml
new file mode 100644
index 000000000..026af8567
--- /dev/null
+++ b/kubernetes/helm_charts/core/odk/Chart.yaml
@@ -0,0 +1,5 @@
+apiVersion: v1
+appVersion: "1.0"
+description: A Helm chart for Kubernetes
+name: odk
+version: 0.1.0
\ No newline at end of file
diff --git a/kubernetes/helm_charts/core/odk/templates/deployment.yaml b/kubernetes/helm_charts/core/odk/templates/deployment.yaml
new file mode 100644
index 000000000..d4badb8f3
--- /dev/null
+++ b/kubernetes/helm_charts/core/odk/templates/deployment.yaml
@@ -0,0 +1,62 @@
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: {{ .Chart.Name }}
+  namespace: {{ .Values.namespace }}
+  annotations:
+    reloader.stakater.com/auto: "true"
+spec:
+  replicas: {{ .Values.replicaCount }}
+  strategy:
+     rollingUpdate:
+        maxSurge: {{ .Values.strategy.maxsurge }}
+        maxUnavailable: {{ .Values.strategy.maxunavailable }}
+  selector:
+    matchLabels:
+      app: {{ .Chart.Name }}
+  template:
+    metadata:
+      labels:
+        app: {{ .Chart.Name }}
+    spec:
+{{- if .Values.imagepullsecrets }}
+      imagePullSecrets:
+      - name: {{ .Values.imagepullsecrets }}
+{{- end }}
+      containers:
+      - name: {{ .Chart.Name }}
+        image: "{{ .Values.dockerhub }}/{{ .Values.repository }}:{{ .Values.image_tag }}"
+        imagePullPolicy: Always
+        env:
+        - name: JAVA_OPTIONS
+          value: {{ .Values.env.javaoptions | quote }}
+        envFrom:
+        - configMapRef:
+            name: {{ .Chart.Name }}-config
+        resources:
+{{ toYaml .Values.resources | indent 10 }}
+        ports:
+        - containerPort: {{ .Values.network.port }}
+        {{- if .Values.healthcheck }}
+        livenessProbe:
+{{ toYaml .Values.livenessProbe | indent 10 }}
+        readinessProbe:
+{{ toYaml .Values.readinessProbe | indent 10 }}
+        {{- end }}
+
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ .Chart.Name }}-service
+  namespace: {{ .Values.namespace }}
+  labels:
+    app: {{ .Chart.Name }}
+spec:
+  ports:
+  - name: http-{{ .Chart.Name }}
+    protocol: TCP
+    port: {{ .Values.network.targetport }}
+  selector:
+    app: {{ .Chart.Name }}
diff --git a/kubernetes/helm_charts/core/odk/templates/hpa.yaml b/kubernetes/helm_charts/core/odk/templates/hpa.yaml
new file mode 100644
index 000000000..0fef8ca0e
--- /dev/null
+++ b/kubernetes/helm_charts/core/odk/templates/hpa.yaml
@@ -0,0 +1,27 @@
+{{- if .Values.autoscaling.enabled }}
+apiVersion: autoscaling/v2beta1
+kind: HorizontalPodAutoscaler
+metadata:
+  name: {{ .Chart.Name }}
+  namespace: {{ .Values.namespace }}
+spec:
+  scaleTargetRef:
+    apiVersion: apps/v1
+    kind: Deployment
+    name: {{ .Chart.Name }}
+  minReplicas: {{ .Values.autoscaling.minReplicas }}
+  maxReplicas: {{ .Values.autoscaling.maxReplicas }}
+  metrics:
+    {{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
+    - type: Resource
+      resource:
+        name: cpu
+        targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
+    {{- end }}
+    {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
+    - type: Resource
+      resource:
+        name: memory
+        targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}
+    {{- end }}
+  {{- end }}
\ No newline at end of file
diff --git a/kubernetes/helm_charts/core/odk/values.j2 b/kubernetes/helm_charts/core/odk/values.j2
new file mode 100644
index 000000000..50349ab31
--- /dev/null
+++ b/kubernetes/helm_charts/core/odk/values.j2
@@ -0,0 +1,35 @@
+### Default variable file for cert-service ###
+
+namespace: {{ namespace }}
+imagepullsecrets: {{ imagepullsecrets }}
+dockerhub: {{ dockerhub }}
+
+env:
+  javaoptions: {{uci_odk_java_mem_limit|default('-Xmx600m')}}
+
+replicaCount: {{uci_odk_replicacount|default(1)}}
+repository: {{uci_odk_repository|default('odk')}}
+image_tag: {{ image_tag }}
+resources:
+  requests:
+    cpu: {{uci_odk_cpu_req|default('100m')}}
+    memory: {{uci_odk_mem_req|default('100Mi')}}
+  limits:
+    cpu: {{uci_odk_cpu_limit|default('1')}}
+    memory: {{uci_odk_mem_limit|default('1024Mi')}}
+network:
+  port: 8080
+  targetport: 8080
+strategy:
+  type: RollingUpdate
+  maxsurge: {{ uci_odk_maxsurge|default('25%') }}
+  maxunavailable: {{ uci_odk_maxunavailable|default('25%') }}
+
+{{ uci_odk_liveness_readiness | to_nice_yaml }}
+
+autoscaling:
+  enabled: {{ uci_odk_autoscaling_enabled | default('false') }}
+  minReplicas: {{ uci_odk_autoscaling_minReplicas|default(1) }}
+  maxReplicas: {{ uci_odk_autoscaling_maxReplicas|default(2) }}
+  targetCPUUtilizationPercentage: {{ uci_odk_autoscaling_targetCPUUtilizationPercentage|default(60) }}
+  targetMemoryUtilizationPercentage: {{ uci_odk_autoscaling_targetMemoryUtilizationPercentage|default('') }}
-- 
GitLab