Skip to content

Commit 5696177

Browse files
authored
Merge pull request #4 from toggle-corp/feature/django-dry
Feature/django dry
2 parents 115bfd9 + 14a74d6 commit 5696177

File tree

10 files changed

+240
-48
lines changed

10 files changed

+240
-48
lines changed

toggle/django-app/Chart.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apiVersion: v2
22
name: django-app
33
description: "Helm Chart to deploy the Django application"
44
type: application
5-
version: 0.1.0
5+
version: 0.1.1
66
sources:
77
- https://github.com/toggle-corp/charts
88

toggle/django-app/templates/_helpers.tpl

+59
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,62 @@ Create the name of the configmap to be used by the django-app
5252
{{- printf "%s-env-name" (include "django-app.fullname" .) -}}
5353
{{- end -}}
5454
{{- end -}}
55+
56+
{{/*
57+
Generate image metadata
58+
*/}}
59+
{{- define "django-app.imageConfig" -}}
60+
{{- $default := deepCopy .Default -}}
61+
{{- $override := deepCopy (default dict .Override) -}}
62+
{{- $merged := (
63+
merge
64+
(dict)
65+
$override
66+
$default
67+
)
68+
-}}
69+
image: "{{ printf "%s:%s" $merged.name $merged.tag }}"
70+
imagePullPolicy: {{ default "IfNotPresent" $merged.imagePullPolicy }}
71+
{{- end }}
72+
73+
{{/*
74+
Generate resources metadata
75+
*/}}
76+
{{- define "django-app.resourcesConfig" -}}
77+
{{- $default := deepCopy .Default -}}
78+
{{- $override := deepCopy (default dict .Override) -}}
79+
{{
80+
(
81+
merge
82+
(dict)
83+
$override
84+
$default
85+
) | toYaml
86+
}}
87+
{{- end }}
88+
89+
{{/*
90+
Generate env configs for deployments
91+
*/}}
92+
{{- define "django-app.envConfig" -}}
93+
- secretRef:
94+
name: {{ template "django-app.secretname" . }}
95+
{{- if .Values.extraSecretsName }}
96+
- secretRef:
97+
name: {{ .Values.extraSecretsName }}
98+
{{- end }}
99+
- configMapRef:
100+
name: {{ template "django-app.envConfigMapName" . }}
101+
{{- if .Values.extraConfigMapName }}
102+
- configMapRef:
103+
name: {{ .Values.extraConfigMapName }}
104+
{{- end }}
105+
{{- end }}
106+
107+
{{/*
108+
Generate env configs for app types
109+
*/}}
110+
{{- define "django-app.appTypeConfig" -}}
111+
- name: {{ .Values.appTypeEnvName }}
112+
value: {{ .Type | quote }}
113+
{{- end }}

toggle/django-app/templates/api/deployment.yaml

+10-9
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ spec:
2626
spec:
2727
containers:
2828
- 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 }}
29+
{{- include "django-app.imageConfig"
30+
(dict "Default" $.Values.image "Override" $.Values.api.image)
31+
| nindent 10
32+
}}
3133
command:
3234
{{- toYaml .Values.api.command | nindent 12 }}
3335
ports:
@@ -37,13 +39,12 @@ spec:
3739
# TODO: livenessProbe
3840
resources:
3941
{{- toYaml .Values.api.resources | nindent 12 }}
40-
env:
41-
- name: DJANGO_APP_TYPE
42-
value: web
4342
envFrom:
44-
- secretRef:
45-
name: {{ template "django-app.secretname" . }}
46-
- configMapRef:
47-
name: {{ template "django-app.envConfigMapName" . }}
43+
{{- include "django-app.envConfig" $ | nindent 12 }}
44+
env:
45+
{{- include "django-app.appTypeConfig"
46+
(dict "Values" $.Values "Type" "web" )
47+
| nindent 12
48+
}}
4849

4950
{{- end }}

toggle/django-app/templates/argo-hooks/hook-job.yaml

+14-10
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,26 @@ spec:
2121
restartPolicy: "Never"
2222
containers:
2323
- 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 }}
24+
{{- include "django-app.imageConfig"
25+
(dict "Default" $.Values.image "Override" $.Values.argoHook.image)
26+
| nindent 10
27+
}}
2628
command: {{ toYaml $hook.command | trim | nindent 12 }}
2729
{{- if $hook.args }}
2830
args: {{ toYaml $hook.args | trim | nindent 12 }}
2931
{{- end }}
3032
resources:
31-
{{- toYaml (default $hook.resources $.Values.argoHook.resources) | nindent 12 }}
32-
env:
33-
- name: DJANGO_APP_TYPE
34-
value: hook
33+
{{- include "django-app.resourcesConfig"
34+
(dict "Default" $.Values.argoHook.resources "Override" $hook.resources)
35+
| nindent 12
36+
}}
3537
envFrom:
36-
- secretRef:
37-
name: {{ template "django-app.secretname" $ }}
38-
- configMapRef:
39-
name: {{ template "django-app.envConfigMapName" $ }}
38+
{{- include "django-app.envConfig" $ | nindent 12 }}
39+
env:
40+
{{- include "django-app.appTypeConfig"
41+
(dict "Values" $.Values "Type" "hook" )
42+
| nindent 12
43+
}}
4044

4145
{{- end }}
4246

toggle/django-app/templates/celery-flower/deployment.yaml

+10-9
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,22 @@ spec:
2727
spec:
2828
containers:
2929
- 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 }}
30+
{{- include "django-app.imageConfig"
31+
(dict "Default" $.Values.image "Override" $.Values.worker.flower.image)
32+
| nindent 10
33+
}}
3234
command:
3335
{{- toYaml .Values.worker.flower.command | nindent 12 }}
3436
# TODO: livenessProbe
3537
resources:
3638
{{- toYaml .Values.worker.flower.resources | nindent 12 }}
37-
env:
38-
- name: DJANGO_APP_TYPE
39-
value: worker
4039
envFrom:
41-
- secretRef:
42-
name: {{ template "django-app.secretname" . }}
43-
- configMapRef:
44-
name: {{ template "django-app.envConfigMapName" . }}
40+
{{- include "django-app.envConfig" $ | nindent 12 }}
41+
env:
42+
{{- include "django-app.appTypeConfig"
43+
(dict "Values" $.Values "Type" "worker" )
44+
| nindent 12
45+
}}
4546

4647
{{- end }}
4748
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{{- if .Values.cronjobs.enabled }}
2+
3+
{{- range $jobName, $job := .Values.cronjobs.jobs }}
4+
5+
{{- if $job.enabled }}
6+
7+
---
8+
apiVersion: batch/v1
9+
kind: CronJob
10+
metadata:
11+
name: {{ template "django-app.fullname" $ }}-job-{{ $jobName | nospace | lower | replace "_" "-" }}
12+
labels:
13+
app: {{ include "django-app.fullname" $ }}
14+
component: cronjob
15+
jobName: {{ $jobName }}
16+
environment: {{ $.Values.environment }}
17+
release: {{ $.Release.Name }}
18+
spec:
19+
schedule: {{ $job.schedule | quote }}
20+
{{- if $job.timeZone }}
21+
timeZone: {{ $job.timeZone | quote }}
22+
{{- end }}
23+
concurrencyPolicy: "Forbid"
24+
jobTemplate:
25+
spec:
26+
activeDeadlineSeconds: {{ default 7200 $job.timeLimit }} # 2 hours default
27+
template:
28+
spec:
29+
restartPolicy: "Never"
30+
containers:
31+
- name: cronjob
32+
command:
33+
{{- toYaml $job.command | nindent 16 }}
34+
{{- include "django-app.imageConfig"
35+
(dict "Default" $.Values.image "Override" $.Values.cronjobs.image)
36+
| nindent 14
37+
}}
38+
resources:
39+
{{- include "django-app.resourcesConfig"
40+
(dict "Default" $.Values.cronjobs.defaultResources "Override" $job.resources)
41+
| nindent 16
42+
}}
43+
envFrom:
44+
{{- include "django-app.envConfig" $ | nindent 16 }}
45+
env:
46+
{{- include "django-app.appTypeConfig"
47+
(dict "Values" $.Values "Type" "cronjob" )
48+
| nindent 16
49+
}}
50+
51+
{{- end }}
52+
53+
{{- end }}
54+
55+
{{- end }}

toggle/django-app/templates/worker-beat/deployment.yaml

+10-9
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,21 @@ spec:
2626
spec:
2727
containers:
2828
- 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 }}
29+
{{- include "django-app.imageConfig"
30+
(dict "Default" $.Values.image "Override" $.Values.worker.beat.image)
31+
| nindent 10
32+
}}
3133
command:
3234
{{- toYaml .Values.worker.beat.command | nindent 12 }}
3335
# TODO: livenessProbe
3436
resources:
3537
{{- toYaml .Values.worker.beat.resources | nindent 12 }}
36-
env:
37-
- name: DJANGO_APP_TYPE
38-
value: worker
3938
envFrom:
40-
- secretRef:
41-
name: {{ template "django-app.secretname" . }}
42-
- configMapRef:
43-
name: {{ template "django-app.envConfigMapName" . }}
39+
{{- include "django-app.envConfig" $ | nindent 12 }}
40+
env:
41+
{{- include "django-app.appTypeConfig"
42+
(dict "Values" $.Values "Type" "worker" )
43+
| nindent 12
44+
}}
4445

4546
{{- end }}

toggle/django-app/templates/worker/deployment.yaml

+14-10
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,26 @@ spec:
3232
spec:
3333
containers:
3434
- name: worker
35-
image: "{{ default $.Values.worker.image.name $.Values.image.name }}:{{ default $.Values.worker.image.tag $.Values.image.tag }}"
36-
imagePullPolicy: {{ default $.Values.worker.image.imagePullPolicy $.Values.image.imagePullPolicy }}
3735
command:
3836
{{- toYaml $.Values.worker.queueCommandPrefix | nindent 12 }}
3937
{{- toYaml $config.celeryArgs | nindent 12 }}
38+
{{- include "django-app.imageConfig"
39+
(dict "Default" $.Values.image "Override" $.Values.worker.image)
40+
| nindent 10
41+
}}
4042
# TODO: livenessProbe
4143
resources:
42-
{{- toYaml $config.resources | nindent 12 }}
43-
env:
44-
- name: DJANGO_APP_TYPE
45-
value: worker
44+
{{- include "django-app.resourcesConfig"
45+
(dict "Default" $.Values.worker.queueDefaultResources "Override" $config.resources)
46+
| nindent 12
47+
}}
4648
envFrom:
47-
- secretRef:
48-
name: {{ template "django-app.secretname" $ }}
49-
- configMapRef:
50-
name: {{ template "django-app.envConfigMapName" $ }}
49+
{{- include "django-app.envConfig" $ | nindent 12 }}
50+
env:
51+
{{- include "django-app.appTypeConfig"
52+
(dict "Values" $.Values "Type" "worker" )
53+
| nindent 12
54+
}}
5155

5256
{{- end }}
5357

toggle/django-app/values-test.yaml

+36
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ environment: ALPHA
33
image:
44
name: ghcr.io/example/example
55
tag: v1.0.1
6+
imagePullPolicy: IfNotPresent
67

78
ingress:
89
enabled: true
@@ -77,9 +78,44 @@ argoHook:
7778
args:
7879
- "date --iso-8601 && ls"
7980

81+
cronjobs:
82+
enabled: true
83+
image:
84+
name: ghcr.io/example/cronjob
85+
tag: v1.cronjob
86+
defaultResources:
87+
requests:
88+
cpu: "1"
89+
memory: 1Gi
90+
limits:
91+
cpu: "1"
92+
memory: 2Gi
93+
# NOTE: Application level configuration
94+
jobs:
95+
dummy-01:
96+
enabled: true
97+
schedule: "0 0 * * *"
98+
command: ["./manage.py", "run-dummy-command", "01"]
99+
resources:
100+
requests:
101+
cpu: "2"
102+
memory: 4Gi
103+
dummy-02:
104+
enabled: true
105+
schedule: "0 0 * * *"
106+
timeZone: "Asia/Kathmandu"
107+
command: ["./manage.py", "run-dummy-command", "02"]
108+
dummy-03:
109+
enabled: false
110+
schedule: "* * * * *"
111+
timeZone: "Asia/Kathmandu"
112+
command: ["./manage.py", "run-dummy-command", "03"]
113+
114+
extraConfigMapName: "my-custom-envs"
80115
env:
81116
ENV_1: VALUE_1
82117

118+
extraSecretsName: "my-custom-secrets"
83119
secrets:
84120
# Postgres
85121
POSTGRES_DB: "{{ $.Values.postgresql.auth.database }}"

0 commit comments

Comments
 (0)