Skip to content

Commit c47cf05

Browse files
authored
Issue 107: async task processor deployment (#108)
1 parent 41af34c commit c47cf05

File tree

4 files changed

+148
-1
lines changed

4 files changed

+148
-1
lines changed

charts/flagsmith/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apiVersion: v2
22
name: flagsmith
33
description: Flagsmith
44
type: application
5-
version: 0.14.0
5+
version: 0.15.0
66
appVersion: 2.34.0
77
dependencies:
88
- name: postgresql

charts/flagsmith/templates/_api_environment.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@
7171
{{- end }}
7272
{{- end }}
7373
{{- end }}
74+
{{- if .Values.taskProcessor.enabled }}
75+
- name: TASK_RUN_METHOD
76+
value: TASK_PROCESSOR
77+
{{- end }}
7478
{{- range $envName, $secretKeyRef := .Values.api.extraEnvFromSecret }}
7579
- name: {{ $envName }}
7680
valueFrom:
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
{{- if .Values.taskProcessor.enabled }}
2+
apiVersion: apps/v1
3+
kind: Deployment
4+
metadata:
5+
name: {{ template "flagsmith.fullname" . }}-task-processor
6+
labels:
7+
{{- include "flagsmith.labels" . | nindent 4 }}
8+
app.kubernetes.io/component: task-processor
9+
spec:
10+
selector:
11+
matchLabels:
12+
{{- include "flagsmith.selectorLabels" . | nindent 6 }}
13+
app.kubernetes.io/component: task-processor
14+
replicas: {{ .Values.taskProcessor.replicacount }}
15+
template:
16+
metadata:
17+
annotations:
18+
checksum/secrets-api: {{ include (print $.Template.BasePath "/secrets-api.yaml") . | sha256sum }}
19+
{{- if and .Values.influxdbExternal.enabled (not .Values.influxdbExternal.tokenFromExistingSecret.enabled) }}
20+
checksum/secrets-influxdb-external: {{ include (print $.Template.BasePath "/secrets-influxdb-external.yaml") . | sha256sum }}
21+
{{- end }}
22+
{{- if .Values.taskProcessor.podAnnotations }}
23+
{{ toYaml .Values.taskProcessor.podAnnotations | nindent 8 }}
24+
{{- end }}
25+
labels:
26+
{{- include "flagsmith.selectorLabels" . | nindent 8 }}
27+
app.kubernetes.io/component: task-processor
28+
{{- if .Values.taskProcessor.podLabels }}
29+
{{ toYaml .Values.taskProcessor.podLabels | indent 8 }}
30+
{{- end }}
31+
spec:
32+
{{- if .Values.taskProcessor.affinity }}
33+
affinity:
34+
{{ toYaml .Values.taskProcessor.affinity | indent 8 }}
35+
{{- end }}
36+
{{- if .Values.taskProcessor.nodeSelector }}
37+
nodeSelector:
38+
{{ toYaml .Values.taskProcessor.nodeSelector | indent 8 }}
39+
{{- end }}
40+
{{- if .Values.taskProcessor.tolerations }}
41+
tolerations:
42+
{{ toYaml .Values.taskProcessor.tolerations | indent 8 }}
43+
{{- end }}
44+
{{- if .Values.taskProcessor.schedulerName }}
45+
schedulerName: "{{ .Values.taskProcessor.schedulerName }}"
46+
{{- end }}
47+
{{- if .Values.api.image.imagePullSecrets }}
48+
imagePullSecrets:
49+
{{ toYaml .Values.api.image.imagePullSecrets | indent 8 }}
50+
{{- end }}
51+
securityContext:
52+
{{- $securityContext := .Values.taskProcessor.podSecurityContext | default (dict) | deepCopy }}
53+
{{- if .Values.taskProcessor.defaultPodSecurityContext.enabled }}
54+
{{- $securityContext = $securityContext | merge (omit .Values.taskProcessor.defaultPodSecurityContext "enabled") }}
55+
{{- end }}
56+
{{- toYaml $securityContext | nindent 8 }}
57+
containers:
58+
- name: {{ .Chart.Name }}-task-processor
59+
image: {{ .Values.api.image.repository }}:{{ .Values.api.image.tag | default (printf "%s" .Chart.AppVersion) }}
60+
imagePullPolicy: {{ .Values.api.image.imagePullPolicy }}
61+
command:
62+
- python
63+
- manage.py
64+
args:
65+
- runprocessor
66+
{{- with .Values.taskProcessor.sleepIntervalMs }}
67+
- --sleepintervalms
68+
- {{ . | quote }}
69+
{{- end }}
70+
{{- with .Values.taskProcessor.numThreads }}
71+
- --numthreads
72+
- {{ . | quote }}
73+
{{- end }}
74+
{{- with .Values.taskProcessor.gracePeriodMs }}
75+
- --graceperiodms
76+
- {{ . | quote }}
77+
{{- end }}
78+
env: {{ include (print $.Template.BasePath "/_api_environment.yaml") . | nindent 8 }}
79+
livenessProbe:
80+
failureThreshold: {{ .Values.taskProcessor.livenessProbe.failureThreshold }}
81+
exec:
82+
command:
83+
- python
84+
- manage.py
85+
- checktaskprocessorthreadhealth
86+
initialDelaySeconds: {{ .Values.taskProcessor.livenessProbe.initialDelaySeconds }}
87+
periodSeconds: {{ .Values.taskProcessor.livenessProbe.periodSeconds }}
88+
successThreshold: {{ .Values.taskProcessor.livenessProbe.successThreshold }}
89+
timeoutSeconds: {{ .Values.taskProcessor.livenessProbe.timeoutSeconds }}
90+
readinessProbe:
91+
failureThreshold: {{ .Values.taskProcessor.readinessProbe.failureThreshold }}
92+
exec:
93+
command:
94+
- python
95+
- manage.py
96+
- checktaskprocessorthreadhealth
97+
initialDelaySeconds: {{ .Values.taskProcessor.readinessProbe.initialDelaySeconds }}
98+
periodSeconds: {{ .Values.taskProcessor.readinessProbe.periodSeconds }}
99+
successThreshold: {{ .Values.taskProcessor.readinessProbe.successThreshold }}
100+
timeoutSeconds: {{ .Values.taskProcessor.readinessProbe.timeoutSeconds }}
101+
resources:
102+
{{ toYaml .Values.taskProcessor.resources | indent 10 }}
103+
{{- end }}

charts/flagsmith/values.yaml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,46 @@ frontend:
116116
successThreshold: 1
117117
timeoutSeconds: 10
118118

119+
# See https://docs.flagsmith.com/deployment/task-processor
120+
taskProcessor:
121+
enabled: false
122+
replicacount: 1
123+
sleepIntervalMs: null
124+
numThreads: null
125+
gracePeriodMs: null
126+
127+
livenessProbe:
128+
failureThreshold: 5
129+
initialDelaySeconds: 5
130+
periodSeconds: 10
131+
successThreshold: 1
132+
timeoutSeconds: 2
133+
readinessProbe:
134+
failureThreshold: 10
135+
initialDelaySeconds: 1
136+
periodSeconds: 10
137+
successThreshold: 1
138+
timeoutSeconds: 2
139+
140+
podAnnotations: {}
141+
resources: {}
142+
# limits:
143+
# cpu: 500m
144+
# memory: 500Mi
145+
# requests:
146+
# cpu: 300m
147+
# memory: 300Mi
148+
podLabels: {}
149+
nodeSelector: {}
150+
tolerations: []
151+
affinity: {}
152+
podSecurityContext: {}
153+
defaultPodSecurityContext:
154+
enabled: true
155+
# runAsNonRoot: true # TODO: enable this, conditional on tag semver
156+
# runAsUser: 1000
157+
# runAsGroup: 1000
158+
119159
postgresql:
120160
enabled: true
121161
serviceAccount:

0 commit comments

Comments
 (0)