Skip to content

Commit 1e8e7cf

Browse files
authored
Merge pull request #2 from toggle-corp/feature/django-app
Feature/django app
2 parents baa0e01 + 2e0cd47 commit 1e8e7cf

19 files changed

+805
-0
lines changed

.github/workflows/helm-publish.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ jobs:
1919
matrix:
2020
include:
2121
- chart: react-serve
22+
- chart: django-app
2223

2324
steps:
2425
- name: Checkout code

toggle/django-app/.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
charts
2+
values-local.yaml
3+
.helm-charts/

toggle/django-app/.helmignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
values-local.yaml

toggle/django-app/Chart.lock

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
dependencies:
2+
- name: redis
3+
repository: https://charts.bitnami.com/bitnami
4+
version: 20.6.3
5+
- name: postgresql
6+
repository: https://charts.bitnami.com/bitnami
7+
version: 16.4.5
8+
- name: minio
9+
repository: https://charts.bitnami.com/bitnami
10+
version: 14.10.5
11+
digest: sha256:bb671bae5b6453f7da356f8482f2ccf7eb182b7d38c28fea28e39841c8bb41b5
12+
generated: "2025-02-11T14:41:21.280715684+05:45"

toggle/django-app/Chart.yaml

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
apiVersion: v2
2+
name: django-app
3+
description: "Helm Chart to deploy the Django application"
4+
type: application
5+
version: 0.0.1
6+
sources:
7+
- https://github.com/toggle-corp/charts
8+
9+
dependencies:
10+
- name: redis
11+
version: 20.6.3
12+
repository: https://charts.bitnami.com/bitnami
13+
condition: redis.enabled
14+
- name: postgresql
15+
version: 16.4.5
16+
condition: postgresql.enabled
17+
repository: https://charts.bitnami.com/bitnami
18+
- name: minio
19+
version: 14.10.5
20+
condition: minio.enabled
21+
repository: https://charts.bitnami.com/bitnami
+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
{{/*
2+
Expand the name of the chart.
3+
*/}}
4+
{{- define "django-app.name" -}}
5+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
6+
{{- end -}}
7+
8+
{{/*
9+
Create a default fully qualified app name.
10+
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
11+
If release name contains chart name it will be used as a full name.
12+
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-label-names
13+
*/}}
14+
{{- define "django-app.fullname" -}}
15+
{{- if .Values.fullnameOverride -}}
16+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
17+
{{- else -}}
18+
{{- $name := default .Chart.Name .Values.nameOverride -}}
19+
{{- if contains $name .Release.Name -}}
20+
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
21+
{{- else -}}
22+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
23+
{{- end -}}
24+
{{- end -}}
25+
{{- end -}}
26+
27+
{{/*
28+
Create chart name and version as used by the chart label.
29+
*/}}
30+
{{- define "django-app.chart" -}}
31+
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
32+
{{- end -}}
33+
34+
{{/*
35+
Create the name of the secret to be used by the django-app
36+
*/}}
37+
{{- define "django-app.secretname" -}}
38+
{{- if .Values.secretsName }}
39+
{{- .Values.secretsName -}}
40+
{{- else }}
41+
{{- printf "%s-secret" (include "django-app.fullname" .) -}}
42+
{{- end -}}
43+
{{- end -}}
44+
45+
{{/*
46+
Create the name of the configmap to be used by the django-app
47+
*/}}
48+
{{- define "django-app.envConfigMapName" -}}
49+
{{- if .Values.envConfigMapName }}
50+
{{- .Values.envConfigMapName -}}
51+
{{- else }}
52+
{{- printf "%s-env-name" (include "django-app.fullname" .) -}}
53+
{{- end -}}
54+
{{- end -}}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
{{- if .Values.api.enabled }}
2+
3+
apiVersion: apps/v1
4+
kind: Deployment
5+
metadata:
6+
name: {{ template "django-app.fullname" . }}-api
7+
labels:
8+
app: {{ include "django-app.fullname" . }}
9+
component: api
10+
environment: {{ .Values.environment }}
11+
release: {{ .Release.Name }}
12+
spec:
13+
replicas: {{ .Values.api.replicaCount }}
14+
selector:
15+
matchLabels:
16+
app: {{ include "django-app.fullname" . }}
17+
component: api
18+
template:
19+
metadata:
20+
annotations:
21+
checksum/secret: {{ include (print .Template.BasePath "/config/secret.yaml") . | sha256sum }}
22+
checksum/configmap: {{ include (print .Template.BasePath "/config/configmap.yaml") . | sha256sum }}
23+
labels:
24+
app: {{ include "django-app.fullname" . }}
25+
component: api
26+
spec:
27+
containers:
28+
- name: api
29+
image: "{{ default .Values.api.image.name .Values.image.name }}:{{ default .Values.api.image.tag .Values.image.tag }}"
30+
imagePullPolicy: {{ default .Values.api.image.imagePullPolicy .Values.image.imagePullPolicy }}
31+
command:
32+
{{- toYaml .Values.api.command | nindent 12 }}
33+
ports:
34+
- name: http
35+
containerPort: {{ .Values.api.containerPort }}
36+
protocol: TCP
37+
# TODO: livenessProbe
38+
resources:
39+
{{- toYaml .Values.api.resources | nindent 12 }}
40+
env:
41+
- name: DJANGO_APP_TYPE
42+
value: web
43+
envFrom:
44+
- secretRef:
45+
name: {{ template "django-app.secretname" . }}
46+
- configMapRef:
47+
name: {{ template "django-app.envConfigMapName" . }}
48+
49+
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{{- if .Values.ingress.enabled }}
2+
3+
apiVersion: networking.k8s.io/v1
4+
kind: Ingress
5+
metadata:
6+
name: {{ template "django-app.fullname" . }}-api
7+
labels:
8+
app: {{ include "django-app.fullname" . }}
9+
component: api
10+
environment: {{ .Values.environment }}
11+
release: {{ .Release.Name }}
12+
spec:
13+
ingressClassName: {{ required "ingress.className" .Values.ingress.className | quote }}
14+
rules:
15+
- host: {{ required "ingress.host" .Values.ingress.host | quote }}
16+
http:
17+
paths:
18+
- path: /
19+
pathType: Prefix
20+
backend:
21+
service:
22+
name: {{ template "django-app.fullname" . }}-api
23+
port:
24+
number: 80
25+
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{{- if .Values.api.enabled -}}
2+
3+
apiVersion: v1
4+
kind: Service
5+
metadata:
6+
name: {{ template "django-app.fullname" . }}-api
7+
labels:
8+
app: {{ include "django-app.fullname" . }}
9+
component: api
10+
environment: {{ .Values.environment }}
11+
release: {{ .Release.Name }}
12+
spec:
13+
type: ClusterIP
14+
selector:
15+
app: {{ include "django-app.fullname" . }}
16+
component: api
17+
ports:
18+
- protocol: TCP
19+
port: 80
20+
targetPort: {{ .Values.api.containerPort }}
21+
22+
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{{- if .Values.argoHook.enabled }}
2+
3+
{{- range $hookName, $hook := .Values.argoHook.hooks }}
4+
5+
{{- if $hook.enabled }}
6+
7+
---
8+
apiVersion: batch/v1
9+
kind: Job
10+
metadata:
11+
{{- if $hook.preserveHistory }}
12+
generateName: {{ template "django-app.fullname" $ }}-{{ $hookName }}-
13+
{{- else }}
14+
name: {{ template "django-app.fullname" $ }}-{{ $hookName }}
15+
{{- end }}
16+
annotations:
17+
argocd.argoproj.io/hook: {{ $hook.hook }}
18+
spec:
19+
template:
20+
spec:
21+
restartPolicy: "Never"
22+
containers:
23+
- name: {{ $hookName }}
24+
image: "{{ default $.Values.argoHook.image.name $.Values.image.name }}:{{ default $.Values.argoHook.image.tag $.Values.image.tag }}"
25+
imagePullPolicy: {{ default $.Values.argoHook.image.imagePullPolicy $.Values.image.imagePullPolicy }}
26+
command: {{ toYaml $hook.command | trim | nindent 12 }}
27+
resources:
28+
{{- toYaml (default $hook.resources $.Values.argoHook.resources) | nindent 12 }}
29+
env:
30+
- name: DJANGO_APP_TYPE
31+
value: hook
32+
envFrom:
33+
- secretRef:
34+
name: {{ template "django-app.secretname" $ }}
35+
- configMapRef:
36+
name: {{ template "django-app.envConfigMapName" $ }}
37+
38+
{{- end }}
39+
40+
{{- end }}
41+
42+
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{{- if .Values.worker.enabled }}
2+
{{- if .Values.worker.flower.enabled }}
3+
4+
apiVersion: apps/v1
5+
kind: Deployment
6+
metadata:
7+
name: {{ template "django-app.fullname" . }}-celery-flower
8+
labels:
9+
app: {{ include "django-app.fullname" . }}
10+
component: worker-flower
11+
environment: {{ .Values.environment }}
12+
release: {{ .Release.Name }}
13+
spec:
14+
replicas: 1
15+
selector:
16+
matchLabels:
17+
app: {{ include "django-app.fullname" . }}
18+
component: worker-flower
19+
template:
20+
metadata:
21+
annotations:
22+
checksum/secret: {{ include (print .Template.BasePath "/config/secret.yaml") . | sha256sum }}
23+
checksum/configmap: {{ include (print .Template.BasePath "/config/configmap.yaml") . | sha256sum }}
24+
labels:
25+
app: {{ include "django-app.fullname" . }}
26+
component: worker-flower
27+
spec:
28+
containers:
29+
- name: worker
30+
image: "{{ default .Values.worker.flower.image.name .Values.image.name }}:{{ default .Values.worker.flower.image.tag .Values.image.tag }}"
31+
imagePullPolicy: {{ default .Values.worker.flower.image.imagePullPolicy .Values.image.imagePullPolicy }}
32+
command:
33+
{{- toYaml .Values.worker.flower.command | nindent 12 }}
34+
# TODO: livenessProbe
35+
resources:
36+
{{- toYaml .Values.worker.flower.resources | nindent 12 }}
37+
env:
38+
- name: DJANGO_APP_TYPE
39+
value: worker
40+
envFrom:
41+
- secretRef:
42+
name: {{ template "django-app.secretname" . }}
43+
- configMapRef:
44+
name: {{ template "django-app.envConfigMapName" . }}
45+
46+
{{- end }}
47+
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{{- if .Values.worker.enabled }}
2+
{{- if .Values.worker.flower.enabled }}
3+
4+
apiVersion: v1
5+
kind: Service
6+
metadata:
7+
name: {{ template "django-app.fullname" . }}-celery-flower
8+
labels:
9+
app: {{ include "django-app.fullname" . }}
10+
component: celery-flower
11+
environment: {{ .Values.environment }}
12+
release: {{ .Release.Name }}
13+
spec:
14+
type: ClusterIP
15+
selector:
16+
app: {{ include "django-app.fullname" . }}
17+
component: worker-flower
18+
ports:
19+
- protocol: TCP
20+
port: 80
21+
targetPort: 8000
22+
23+
{{- end }}
24+
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
kind: ConfigMap
2+
apiVersion: v1
3+
metadata:
4+
name: {{ template "django-app.envConfigMapName" . }}
5+
labels:
6+
app: {{ include "django-app.fullname" . }}
7+
environment: {{ .Values.environment }}
8+
release: {{ .Release.Name }}
9+
data:
10+
# Configs
11+
{{- range $name, $value := .Values.env }}
12+
{{ $name }}: {{ tpl $value $ | quote }}
13+
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
kind: Secret
2+
apiVersion: v1
3+
metadata:
4+
name: {{ template "django-app.secretname" . }}
5+
labels:
6+
app: {{ include "django-app.fullname" . }}
7+
environment: {{ .Values.environment }}
8+
release: {{ .Release.Name }}
9+
type: Opaque
10+
stringData:
11+
# secrets
12+
{{- range $name, $value := .Values.secrets }}
13+
{{ $name }}: {{ tpl $value $ | quote }}
14+
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{{- if .Values.worker.enabled }}
2+
3+
apiVersion: apps/v1
4+
kind: Deployment
5+
metadata:
6+
name: {{ template "django-app.fullname" . }}-worker-beat
7+
labels:
8+
app: {{ include "django-app.fullname" . }}
9+
component: worker-beat
10+
environment: {{ .Values.environment }}
11+
release: {{ .Release.Name }}
12+
spec:
13+
replicas: 1 # This should only 1
14+
selector:
15+
matchLabels:
16+
app: {{ include "django-app.fullname" . }}
17+
component: worker-beat
18+
template:
19+
metadata:
20+
annotations:
21+
checksum/secret: {{ include (print .Template.BasePath "/config/secret.yaml") . | sha256sum }}
22+
checksum/configmap: {{ include (print .Template.BasePath "/config/configmap.yaml") . | sha256sum }}
23+
labels:
24+
app: {{ include "django-app.fullname" . }}
25+
component: worker-beat
26+
spec:
27+
containers:
28+
- name: worker-beat
29+
image: "{{ default .Values.worker.beat.image.name .Values.image.name }}:{{ default .Values.worker.beat.image.tag .Values.image.tag }}"
30+
imagePullPolicy: {{ default .Values.worker.beat.image.imagePullPolicy .Values.image.imagePullPolicy }}
31+
command:
32+
{{- toYaml .Values.worker.beat.command | nindent 12 }}
33+
# TODO: livenessProbe
34+
resources:
35+
{{- toYaml .Values.worker.beat.resources | nindent 12 }}
36+
env:
37+
- name: DJANGO_APP_TYPE
38+
value: worker
39+
envFrom:
40+
- secretRef:
41+
name: {{ template "django-app.secretname" . }}
42+
- configMapRef:
43+
name: {{ template "django-app.envConfigMapName" . }}
44+
45+
{{- end }}

0 commit comments

Comments
 (0)