Skip to content
This repository was archived by the owner on Aug 20, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion toggle/django-app/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ apiVersion: v2
name: django-app
description: "Helm Chart to deploy the Django application"
type: application
version: 0.1.0
version: 0.1.1
sources:
- https://github.com/toggle-corp/charts

Expand Down
59 changes: 59 additions & 0 deletions toggle/django-app/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,62 @@ Create the name of the configmap to be used by the django-app
{{- printf "%s-env-name" (include "django-app.fullname" .) -}}
{{- end -}}
{{- end -}}

{{/*
Generate image metadata
*/}}
{{- define "django-app.imageConfig" -}}
{{- $default := deepCopy .Default -}}
{{- $override := deepCopy (default dict .Override) -}}
{{- $merged := (
merge
(dict)
$override
$default
)
-}}
image: "{{ printf "%s:%s" $merged.name $merged.tag }}"
imagePullPolicy: {{ default "IfNotPresent" $merged.imagePullPolicy }}
{{- end }}

{{/*
Generate resources metadata
*/}}
{{- define "django-app.resourcesConfig" -}}
{{- $default := deepCopy .Default -}}
{{- $override := deepCopy (default dict .Override) -}}
{{
(
merge
(dict)
$override
$default
) | toYaml
}}
{{- end }}

{{/*
Generate env configs for deployments
*/}}
{{- define "django-app.envConfig" -}}
- secretRef:
name: {{ template "django-app.secretname" . }}
{{- if .Values.extraSecretsName }}
- secretRef:
name: {{ .Values.extraSecretsName }}
{{- end }}
- configMapRef:
name: {{ template "django-app.envConfigMapName" . }}
{{- if .Values.extraConfigMapName }}
- configMapRef:
name: {{ .Values.extraConfigMapName }}
{{- end }}
{{- end }}

{{/*
Generate env configs for app types
*/}}
{{- define "django-app.appTypeConfig" -}}
- name: {{ .Values.appTypeEnvName }}
value: {{ .Type | quote }}
{{- end }}
19 changes: 10 additions & 9 deletions toggle/django-app/templates/api/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,10 @@ spec:
spec:
containers:
- name: api
image: "{{ default .Values.api.image.name .Values.image.name }}:{{ default .Values.api.image.tag .Values.image.tag }}"
imagePullPolicy: {{ default .Values.api.image.imagePullPolicy .Values.image.imagePullPolicy }}
{{- include "django-app.imageConfig"
(dict "Default" $.Values.image "Override" $.Values.api.image)
| nindent 10
}}
command:
{{- toYaml .Values.api.command | nindent 12 }}
ports:
Expand All @@ -37,13 +39,12 @@ spec:
# TODO: livenessProbe
resources:
{{- toYaml .Values.api.resources | nindent 12 }}
env:
- name: DJANGO_APP_TYPE
value: web
envFrom:
- secretRef:
name: {{ template "django-app.secretname" . }}
- configMapRef:
name: {{ template "django-app.envConfigMapName" . }}
{{- include "django-app.envConfig" $ | nindent 12 }}
env:
{{- include "django-app.appTypeConfig"
(dict "Values" $.Values "Type" "web" )
| nindent 12
}}

{{- end }}
24 changes: 14 additions & 10 deletions toggle/django-app/templates/argo-hooks/hook-job.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,26 @@ spec:
restartPolicy: "Never"
containers:
- name: {{ $hookName }}
image: "{{ default $.Values.argoHook.image.name $.Values.image.name }}:{{ default $.Values.argoHook.image.tag $.Values.image.tag }}"
imagePullPolicy: {{ default $.Values.argoHook.image.imagePullPolicy $.Values.image.imagePullPolicy }}
{{- include "django-app.imageConfig"
(dict "Default" $.Values.image "Override" $.Values.argoHook.image)
| nindent 10
}}
command: {{ toYaml $hook.command | trim | nindent 12 }}
{{- if $hook.args }}
args: {{ toYaml $hook.args | trim | nindent 12 }}
{{- end }}
resources:
{{- toYaml (default $hook.resources $.Values.argoHook.resources) | nindent 12 }}
env:
- name: DJANGO_APP_TYPE
value: hook
{{- include "django-app.resourcesConfig"
(dict "Default" $.Values.argoHook.resources "Override" $hook.resources)
| nindent 12
}}
envFrom:
- secretRef:
name: {{ template "django-app.secretname" $ }}
- configMapRef:
name: {{ template "django-app.envConfigMapName" $ }}
{{- include "django-app.envConfig" $ | nindent 12 }}
env:
{{- include "django-app.appTypeConfig"
(dict "Values" $.Values "Type" "hook" )
| nindent 12
}}

{{- end }}

Expand Down
19 changes: 10 additions & 9 deletions toggle/django-app/templates/celery-flower/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,22 @@ spec:
spec:
containers:
- name: worker
image: "{{ default .Values.worker.flower.image.name .Values.image.name }}:{{ default .Values.worker.flower.image.tag .Values.image.tag }}"
imagePullPolicy: {{ default .Values.worker.flower.image.imagePullPolicy .Values.image.imagePullPolicy }}
{{- include "django-app.imageConfig"
(dict "Default" $.Values.image "Override" $.Values.worker.flower.image)
| nindent 10
}}
command:
{{- toYaml .Values.worker.flower.command | nindent 12 }}
# TODO: livenessProbe
resources:
{{- toYaml .Values.worker.flower.resources | nindent 12 }}
env:
- name: DJANGO_APP_TYPE
value: worker
envFrom:
- secretRef:
name: {{ template "django-app.secretname" . }}
- configMapRef:
name: {{ template "django-app.envConfigMapName" . }}
{{- include "django-app.envConfig" $ | nindent 12 }}
env:
{{- include "django-app.appTypeConfig"
(dict "Values" $.Values "Type" "worker" )
| nindent 12
}}

{{- end }}
{{- end }}
55 changes: 55 additions & 0 deletions toggle/django-app/templates/cronjobs/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
{{- if .Values.cronjobs.enabled }}

{{- range $jobName, $job := .Values.cronjobs.jobs }}

{{- if $job.enabled }}

---
apiVersion: batch/v1
kind: CronJob
metadata:
name: {{ template "django-app.fullname" $ }}-job-{{ $jobName | nospace | lower | replace "_" "-" }}
labels:
app: {{ include "django-app.fullname" $ }}
component: cronjob
jobName: {{ $jobName }}
environment: {{ $.Values.environment }}
release: {{ $.Release.Name }}
spec:
schedule: {{ $job.schedule | quote }}
{{- if $job.timeZone }}
timeZone: {{ $job.timeZone | quote }}
{{- end }}
concurrencyPolicy: "Forbid"
jobTemplate:
spec:
activeDeadlineSeconds: {{ default 7200 $job.timeLimit }} # 2 hours default
template:
spec:
restartPolicy: "Never"
containers:
- name: cronjob
command:
{{- toYaml $job.command | nindent 16 }}
{{- include "django-app.imageConfig"
(dict "Default" $.Values.image "Override" $.Values.cronjobs.image)
| nindent 14
}}
resources:
{{- include "django-app.resourcesConfig"
(dict "Default" $.Values.cronjobs.defaultResources "Override" $job.resources)
| nindent 16
}}
envFrom:
{{- include "django-app.envConfig" $ | nindent 16 }}
env:
{{- include "django-app.appTypeConfig"
(dict "Values" $.Values "Type" "cronjob" )
| nindent 16
}}

{{- end }}

{{- end }}

{{- end }}
19 changes: 10 additions & 9 deletions toggle/django-app/templates/worker-beat/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,21 @@ spec:
spec:
containers:
- name: worker-beat
image: "{{ default .Values.worker.beat.image.name .Values.image.name }}:{{ default .Values.worker.beat.image.tag .Values.image.tag }}"
imagePullPolicy: {{ default .Values.worker.beat.image.imagePullPolicy .Values.image.imagePullPolicy }}
{{- include "django-app.imageConfig"
(dict "Default" $.Values.image "Override" $.Values.worker.beat.image)
| nindent 10
}}
command:
{{- toYaml .Values.worker.beat.command | nindent 12 }}
# TODO: livenessProbe
resources:
{{- toYaml .Values.worker.beat.resources | nindent 12 }}
env:
- name: DJANGO_APP_TYPE
value: worker
envFrom:
- secretRef:
name: {{ template "django-app.secretname" . }}
- configMapRef:
name: {{ template "django-app.envConfigMapName" . }}
{{- include "django-app.envConfig" $ | nindent 12 }}
env:
{{- include "django-app.appTypeConfig"
(dict "Values" $.Values "Type" "worker" )
| nindent 12
}}

{{- end }}
24 changes: 14 additions & 10 deletions toggle/django-app/templates/worker/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,22 +32,26 @@ spec:
spec:
containers:
- name: worker
image: "{{ default $.Values.worker.image.name $.Values.image.name }}:{{ default $.Values.worker.image.tag $.Values.image.tag }}"
imagePullPolicy: {{ default $.Values.worker.image.imagePullPolicy $.Values.image.imagePullPolicy }}
command:
{{- toYaml $.Values.worker.queueCommandPrefix | nindent 12 }}
{{- toYaml $config.celeryArgs | nindent 12 }}
{{- include "django-app.imageConfig"
(dict "Default" $.Values.image "Override" $.Values.worker.image)
| nindent 10
}}
# TODO: livenessProbe
resources:
{{- toYaml $config.resources | nindent 12 }}
env:
- name: DJANGO_APP_TYPE
value: worker
{{- include "django-app.resourcesConfig"
(dict "Default" $.Values.worker.queueDefaultResources "Override" $config.resources)
| nindent 12
}}
envFrom:
- secretRef:
name: {{ template "django-app.secretname" $ }}
- configMapRef:
name: {{ template "django-app.envConfigMapName" $ }}
{{- include "django-app.envConfig" $ | nindent 12 }}
env:
{{- include "django-app.appTypeConfig"
(dict "Values" $.Values "Type" "worker" )
| nindent 12
}}

{{- end }}

Expand Down
36 changes: 36 additions & 0 deletions toggle/django-app/values-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ environment: ALPHA
image:
name: ghcr.io/example/example
tag: v1.0.1
imagePullPolicy: IfNotPresent

ingress:
enabled: true
Expand Down Expand Up @@ -77,9 +78,44 @@ argoHook:
args:
- "date --iso-8601 && ls"

cronjobs:
enabled: true
image:
name: ghcr.io/example/cronjob
tag: v1.cronjob
defaultResources:
requests:
cpu: "1"
memory: 1Gi
limits:
cpu: "1"
memory: 2Gi
# NOTE: Application level configuration
jobs:
dummy-01:
enabled: true
schedule: "0 0 * * *"
command: ["./manage.py", "run-dummy-command", "01"]
resources:
requests:
cpu: "2"
memory: 4Gi
dummy-02:
enabled: true
schedule: "0 0 * * *"
timeZone: "Asia/Kathmandu"
command: ["./manage.py", "run-dummy-command", "02"]
dummy-03:
enabled: false
schedule: "* * * * *"
timeZone: "Asia/Kathmandu"
command: ["./manage.py", "run-dummy-command", "03"]

extraConfigMapName: "my-custom-envs"
env:
ENV_1: VALUE_1

extraSecretsName: "my-custom-secrets"
secrets:
# Postgres
POSTGRES_DB: "{{ $.Values.postgresql.auth.database }}"
Expand Down
Loading
Loading