diff --git a/.github/workflows/helm-publish.yaml b/.github/workflows/helm-publish.yaml index 637f7a8..8fcd807 100644 --- a/.github/workflows/helm-publish.yaml +++ b/.github/workflows/helm-publish.yaml @@ -19,6 +19,7 @@ jobs: matrix: include: - chart: react-serve + - chart: django-app steps: - name: Checkout code diff --git a/toggle/django-app/.gitignore b/toggle/django-app/.gitignore new file mode 100644 index 0000000..295e8a9 --- /dev/null +++ b/toggle/django-app/.gitignore @@ -0,0 +1,3 @@ +charts +values-local.yaml +.helm-charts/ diff --git a/toggle/django-app/.helmignore b/toggle/django-app/.helmignore new file mode 100644 index 0000000..bbe7669 --- /dev/null +++ b/toggle/django-app/.helmignore @@ -0,0 +1 @@ +values-local.yaml diff --git a/toggle/django-app/Chart.lock b/toggle/django-app/Chart.lock new file mode 100644 index 0000000..fd4b6f8 --- /dev/null +++ b/toggle/django-app/Chart.lock @@ -0,0 +1,12 @@ +dependencies: +- name: redis + repository: https://charts.bitnami.com/bitnami + version: 20.6.3 +- name: postgresql + repository: https://charts.bitnami.com/bitnami + version: 16.4.5 +- name: minio + repository: https://charts.bitnami.com/bitnami + version: 14.10.5 +digest: sha256:bb671bae5b6453f7da356f8482f2ccf7eb182b7d38c28fea28e39841c8bb41b5 +generated: "2025-02-11T14:41:21.280715684+05:45" diff --git a/toggle/django-app/Chart.yaml b/toggle/django-app/Chart.yaml new file mode 100644 index 0000000..bebe772 --- /dev/null +++ b/toggle/django-app/Chart.yaml @@ -0,0 +1,21 @@ +apiVersion: v2 +name: django-app +description: "Helm Chart to deploy the Django application" +type: application +version: 0.0.1 +sources: + - https://github.com/toggle-corp/charts + +dependencies: + - name: redis + version: 20.6.3 + repository: https://charts.bitnami.com/bitnami + condition: redis.enabled + - name: postgresql + version: 16.4.5 + condition: postgresql.enabled + repository: https://charts.bitnami.com/bitnami + - name: minio + version: 14.10.5 + condition: minio.enabled + repository: https://charts.bitnami.com/bitnami diff --git a/toggle/django-app/templates/_helpers.tpl b/toggle/django-app/templates/_helpers.tpl new file mode 100644 index 0000000..93b5c0f --- /dev/null +++ b/toggle/django-app/templates/_helpers.tpl @@ -0,0 +1,54 @@ +{{/* + Expand the name of the chart. +*/}} +{{- define "django-app.name" -}} + {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* + Create a default fully qualified app name. + We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). + If release name contains chart name it will be used as a full name. + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-label-names +*/}} +{{- define "django-app.fullname" -}} + {{- if .Values.fullnameOverride -}} + {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} + {{- else -}} + {{- $name := default .Chart.Name .Values.nameOverride -}} + {{- if contains $name .Release.Name -}} + {{- .Release.Name | trunc 63 | trimSuffix "-" -}} + {{- else -}} + {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} + {{- end -}} + {{- end -}} +{{- end -}} + +{{/* + Create chart name and version as used by the chart label. +*/}} +{{- define "django-app.chart" -}} + {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create the name of the secret to be used by the django-app +*/}} +{{- define "django-app.secretname" -}} +{{- if .Values.secretsName }} + {{- .Values.secretsName -}} +{{- else }} + {{- printf "%s-secret" (include "django-app.fullname" .) -}} +{{- end -}} +{{- end -}} + +{{/* +Create the name of the configmap to be used by the django-app +*/}} +{{- define "django-app.envConfigMapName" -}} +{{- if .Values.envConfigMapName }} + {{- .Values.envConfigMapName -}} +{{- else }} + {{- printf "%s-env-name" (include "django-app.fullname" .) -}} +{{- end -}} +{{- end -}} diff --git a/toggle/django-app/templates/api/deployment.yaml b/toggle/django-app/templates/api/deployment.yaml new file mode 100644 index 0000000..0c9d531 --- /dev/null +++ b/toggle/django-app/templates/api/deployment.yaml @@ -0,0 +1,49 @@ +{{- if .Values.api.enabled }} + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "django-app.fullname" . }}-api + labels: + app: {{ include "django-app.fullname" . }} + component: api + environment: {{ .Values.environment }} + release: {{ .Release.Name }} +spec: + replicas: {{ .Values.api.replicaCount }} + selector: + matchLabels: + app: {{ include "django-app.fullname" . }} + component: api + template: + metadata: + annotations: + checksum/secret: {{ include (print .Template.BasePath "/config/secret.yaml") . | sha256sum }} + checksum/configmap: {{ include (print .Template.BasePath "/config/configmap.yaml") . | sha256sum }} + labels: + app: {{ include "django-app.fullname" . }} + component: api + 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 }} + command: + {{- toYaml .Values.api.command | nindent 12 }} + ports: + - name: http + containerPort: {{ .Values.api.containerPort }} + protocol: TCP + # 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" . }} + +{{- end }} diff --git a/toggle/django-app/templates/api/ingress.yaml b/toggle/django-app/templates/api/ingress.yaml new file mode 100644 index 0000000..6eeb626 --- /dev/null +++ b/toggle/django-app/templates/api/ingress.yaml @@ -0,0 +1,25 @@ +{{- if .Values.ingress.enabled }} + +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ template "django-app.fullname" . }}-api + labels: + app: {{ include "django-app.fullname" . }} + component: api + environment: {{ .Values.environment }} + release: {{ .Release.Name }} +spec: + ingressClassName: {{ required "ingress.className" .Values.ingress.className | quote }} + rules: + - host: {{ required "ingress.host" .Values.ingress.host | quote }} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: {{ template "django-app.fullname" . }}-api + port: + number: 80 +{{- end }} diff --git a/toggle/django-app/templates/api/service.yaml b/toggle/django-app/templates/api/service.yaml new file mode 100644 index 0000000..42ea303 --- /dev/null +++ b/toggle/django-app/templates/api/service.yaml @@ -0,0 +1,22 @@ +{{- if .Values.api.enabled -}} + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "django-app.fullname" . }}-api + labels: + app: {{ include "django-app.fullname" . }} + component: api + environment: {{ .Values.environment }} + release: {{ .Release.Name }} +spec: + type: ClusterIP + selector: + app: {{ include "django-app.fullname" . }} + component: api + ports: + - protocol: TCP + port: 80 + targetPort: {{ .Values.api.containerPort }} + +{{- end }} diff --git a/toggle/django-app/templates/argo-hooks/hook-job.yaml b/toggle/django-app/templates/argo-hooks/hook-job.yaml new file mode 100644 index 0000000..206ee16 --- /dev/null +++ b/toggle/django-app/templates/argo-hooks/hook-job.yaml @@ -0,0 +1,42 @@ +{{- if .Values.argoHook.enabled }} + +{{- range $hookName, $hook := .Values.argoHook.hooks }} + +{{- if $hook.enabled }} + +--- +apiVersion: batch/v1 +kind: Job +metadata: + {{- if $hook.preserveHistory }} + generateName: {{ template "django-app.fullname" $ }}-{{ $hookName }}- + {{- else }} + name: {{ template "django-app.fullname" $ }}-{{ $hookName }} + {{- end }} + annotations: + argocd.argoproj.io/hook: {{ $hook.hook }} +spec: + template: + 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 }} + command: {{ toYaml $hook.command | trim | nindent 12 }} + resources: + {{- toYaml (default $hook.resources $.Values.argoHook.resources) | nindent 12 }} + env: + - name: DJANGO_APP_TYPE + value: hook + envFrom: + - secretRef: + name: {{ template "django-app.secretname" $ }} + - configMapRef: + name: {{ template "django-app.envConfigMapName" $ }} + +{{- end }} + +{{- end }} + +{{- end }} diff --git a/toggle/django-app/templates/celery-flower/deployment.yaml b/toggle/django-app/templates/celery-flower/deployment.yaml new file mode 100644 index 0000000..bb8affd --- /dev/null +++ b/toggle/django-app/templates/celery-flower/deployment.yaml @@ -0,0 +1,47 @@ +{{- if .Values.worker.enabled }} +{{- if .Values.worker.flower.enabled }} + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "django-app.fullname" . }}-celery-flower + labels: + app: {{ include "django-app.fullname" . }} + component: worker-flower + environment: {{ .Values.environment }} + release: {{ .Release.Name }} +spec: + replicas: 1 + selector: + matchLabels: + app: {{ include "django-app.fullname" . }} + component: worker-flower + template: + metadata: + annotations: + checksum/secret: {{ include (print .Template.BasePath "/config/secret.yaml") . | sha256sum }} + checksum/configmap: {{ include (print .Template.BasePath "/config/configmap.yaml") . | sha256sum }} + labels: + app: {{ include "django-app.fullname" . }} + component: worker-flower + 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 }} + 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" . }} + +{{- end }} +{{- end }} diff --git a/toggle/django-app/templates/celery-flower/service.yaml b/toggle/django-app/templates/celery-flower/service.yaml new file mode 100644 index 0000000..fa9f99b --- /dev/null +++ b/toggle/django-app/templates/celery-flower/service.yaml @@ -0,0 +1,24 @@ +{{- if .Values.worker.enabled }} +{{- if .Values.worker.flower.enabled }} + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "django-app.fullname" . }}-celery-flower + labels: + app: {{ include "django-app.fullname" . }} + component: celery-flower + environment: {{ .Values.environment }} + release: {{ .Release.Name }} +spec: + type: ClusterIP + selector: + app: {{ include "django-app.fullname" . }} + component: worker-flower + ports: + - protocol: TCP + port: 80 + targetPort: 8000 + +{{- end }} +{{- end }} diff --git a/toggle/django-app/templates/config/configmap.yaml b/toggle/django-app/templates/config/configmap.yaml new file mode 100644 index 0000000..2ceb64b --- /dev/null +++ b/toggle/django-app/templates/config/configmap.yaml @@ -0,0 +1,13 @@ +kind: ConfigMap +apiVersion: v1 +metadata: + name: {{ template "django-app.envConfigMapName" . }} + labels: + app: {{ include "django-app.fullname" . }} + environment: {{ .Values.environment }} + release: {{ .Release.Name }} +data: + # Configs + {{- range $name, $value := .Values.env }} + {{ $name }}: {{ tpl $value $ | quote }} + {{- end }} diff --git a/toggle/django-app/templates/config/secret.yaml b/toggle/django-app/templates/config/secret.yaml new file mode 100644 index 0000000..4e60893 --- /dev/null +++ b/toggle/django-app/templates/config/secret.yaml @@ -0,0 +1,14 @@ +kind: Secret +apiVersion: v1 +metadata: + name: {{ template "django-app.secretname" . }} + labels: + app: {{ include "django-app.fullname" . }} + environment: {{ .Values.environment }} + release: {{ .Release.Name }} +type: Opaque +stringData: + # secrets + {{- range $name, $value := .Values.secrets }} + {{ $name }}: {{ tpl $value $ | quote }} + {{- end }} diff --git a/toggle/django-app/templates/worker-beat/deployment.yaml b/toggle/django-app/templates/worker-beat/deployment.yaml new file mode 100644 index 0000000..743123e --- /dev/null +++ b/toggle/django-app/templates/worker-beat/deployment.yaml @@ -0,0 +1,45 @@ +{{- if .Values.worker.enabled }} + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "django-app.fullname" . }}-worker-beat + labels: + app: {{ include "django-app.fullname" . }} + component: worker-beat + environment: {{ .Values.environment }} + release: {{ .Release.Name }} +spec: + replicas: 1 # This should only 1 + selector: + matchLabels: + app: {{ include "django-app.fullname" . }} + component: worker-beat + template: + metadata: + annotations: + checksum/secret: {{ include (print .Template.BasePath "/config/secret.yaml") . | sha256sum }} + checksum/configmap: {{ include (print .Template.BasePath "/config/configmap.yaml") . | sha256sum }} + labels: + app: {{ include "django-app.fullname" . }} + component: worker-beat + 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 }} + 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" . }} + +{{- end }} diff --git a/toggle/django-app/templates/worker/deployment.yaml b/toggle/django-app/templates/worker/deployment.yaml new file mode 100644 index 0000000..98cb363 --- /dev/null +++ b/toggle/django-app/templates/worker/deployment.yaml @@ -0,0 +1,54 @@ +{{- if .Values.worker.enabled }} + +{{- range $queue_name, $config := .Values.worker.queues }} + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "django-app.fullname" $ }}-worker-{{ $queue_name }} + labels: + app: {{ include "django-app.fullname" $ }} + component: worker + queue: {{ $queue_name }} + environment: {{ $.Values.environment }} + release: {{ $.Release.Name }} +spec: + replicas: {{ $config.replicaCount }} + selector: + matchLabels: + app: {{ include "django-app.fullname" $ }} + component: worker + queue: {{ $queue_name }} + template: + metadata: + annotations: + checksum/secret: {{ include (print $.Template.BasePath "/config/secret.yaml") $ | sha256sum }} + checksum/configmap: {{ include (print $.Template.BasePath "/config/configmap.yaml") $ | sha256sum }} + labels: + app: {{ include "django-app.fullname" $ }} + component: worker + queue: {{ $queue_name }} + 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 }} + # TODO: livenessProbe + resources: + {{- toYaml $config.resources | nindent 12 }} + env: + - name: DJANGO_APP_TYPE + value: worker + envFrom: + - secretRef: + name: {{ template "django-app.secretname" $ }} + - configMapRef: + name: {{ template "django-app.envConfigMapName" $ }} + +{{- end }} + +{{- end }} diff --git a/toggle/django-app/values-sample.yaml b/toggle/django-app/values-sample.yaml new file mode 100644 index 0000000..5df8d40 --- /dev/null +++ b/toggle/django-app/values-sample.yaml @@ -0,0 +1,90 @@ +environment: ALPHA + +image: + name: ghcr.io/example/example + tag: v1.0.1 + +ingress: + enabled: true + host: myapp.example.com + className: nginx + +redis: + enabled: true + fullnameOverride: my-app-redis + master: + persistence: + storageClass: longhorn + +postgresql: + enabled: true + fullnameOverride: "my-app-postgres" + auth: + postgresPassword: "random-strong-password" + database: "my-app" + primary: + persistence: + storageClass: "longhorn" + size: 2Gi + +minio: + enabled: true + fullnameOverride: my-app-minio + global: + defaultStorageClass: longhorn + apiIngress: + ingressClassName: nginx + hostname: myapp-minio.example.com + auth: + rootPassword: "random-strong-password" + persistence: + size: 2Gi +# NOTE: To change bucket name look at defaultBuckets and provisioning.extraCommands + +api: + resources: + requests: + cpu: "0.2" + +worker: + image: + name: ghcr.io/example/example + tag: v1.0.1 + beat: + resources: + requests: + cpu: "0.1" + flower: + enabled: true + resources: + requests: + cpu: "0.1" + queues: + # NOTE: Make sure keys are lowercase + default: + resources: + requests: + cpu: "0.1" + +env: + ENV_1: VALUE_1 + +secrets: + # Postgres + POSTGRES_DB: "{{ $.Values.postgresql.auth.database }}" + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "{{ $.Values.postgresql.auth.postgresPassword }}" + POSTGRES_HOST: "{{ include \"postgresql.v1.primary.fullname\" $.Subcharts.postgresql }}" + POSTGRES_PORT: "{{ include \"postgresql.v1.service.port\" $.Subcharts.postgresql }}" + + # Redis + REDIS_URL: "redis://{{ printf \"%s-master\" (include \"common.names.fullname\" .Subcharts.redis) }}:6379/0" + + # Minio (S3) + AWS_S3_AWS_ENDPOINT_URL: "https://{{ $.Values.minio.apiIngress.hostname }}/" + AWS_S3_ACCESS_KEY_ID: "{{ required \".Values.minio.auth.rootUser\" $.Values.minio.auth.rootUser }}" + AWS_S3_SECRET_ACCESS_KEY: "{{ required \".Values.minio.auth.rootPassword\" $.Values.minio.auth.rootPassword }}" + AWS_S3_REGION: "us-east-1" + # NOTE: To change bucket name look at defaultBuckets and provisioning.extraCommands + AWS_S3_BUCKET_STATIC_NAME: static-data + AWS_S3_BUCKET_MEDIA_NAME: media-data diff --git a/toggle/django-app/values-test.yaml b/toggle/django-app/values-test.yaml new file mode 100644 index 0000000..5df8d40 --- /dev/null +++ b/toggle/django-app/values-test.yaml @@ -0,0 +1,90 @@ +environment: ALPHA + +image: + name: ghcr.io/example/example + tag: v1.0.1 + +ingress: + enabled: true + host: myapp.example.com + className: nginx + +redis: + enabled: true + fullnameOverride: my-app-redis + master: + persistence: + storageClass: longhorn + +postgresql: + enabled: true + fullnameOverride: "my-app-postgres" + auth: + postgresPassword: "random-strong-password" + database: "my-app" + primary: + persistence: + storageClass: "longhorn" + size: 2Gi + +minio: + enabled: true + fullnameOverride: my-app-minio + global: + defaultStorageClass: longhorn + apiIngress: + ingressClassName: nginx + hostname: myapp-minio.example.com + auth: + rootPassword: "random-strong-password" + persistence: + size: 2Gi +# NOTE: To change bucket name look at defaultBuckets and provisioning.extraCommands + +api: + resources: + requests: + cpu: "0.2" + +worker: + image: + name: ghcr.io/example/example + tag: v1.0.1 + beat: + resources: + requests: + cpu: "0.1" + flower: + enabled: true + resources: + requests: + cpu: "0.1" + queues: + # NOTE: Make sure keys are lowercase + default: + resources: + requests: + cpu: "0.1" + +env: + ENV_1: VALUE_1 + +secrets: + # Postgres + POSTGRES_DB: "{{ $.Values.postgresql.auth.database }}" + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "{{ $.Values.postgresql.auth.postgresPassword }}" + POSTGRES_HOST: "{{ include \"postgresql.v1.primary.fullname\" $.Subcharts.postgresql }}" + POSTGRES_PORT: "{{ include \"postgresql.v1.service.port\" $.Subcharts.postgresql }}" + + # Redis + REDIS_URL: "redis://{{ printf \"%s-master\" (include \"common.names.fullname\" .Subcharts.redis) }}:6379/0" + + # Minio (S3) + AWS_S3_AWS_ENDPOINT_URL: "https://{{ $.Values.minio.apiIngress.hostname }}/" + AWS_S3_ACCESS_KEY_ID: "{{ required \".Values.minio.auth.rootUser\" $.Values.minio.auth.rootUser }}" + AWS_S3_SECRET_ACCESS_KEY: "{{ required \".Values.minio.auth.rootPassword\" $.Values.minio.auth.rootPassword }}" + AWS_S3_REGION: "us-east-1" + # NOTE: To change bucket name look at defaultBuckets and provisioning.extraCommands + AWS_S3_BUCKET_STATIC_NAME: static-data + AWS_S3_BUCKET_MEDIA_NAME: media-data diff --git a/toggle/django-app/values.yaml b/toggle/django-app/values.yaml new file mode 100644 index 0000000..8506d59 --- /dev/null +++ b/toggle/django-app/values.yaml @@ -0,0 +1,198 @@ +environment: PROD + +image: {} + # name: + # tag: + # imagePullPolicy: IfNotPresent + +ingress: + enabled: false + host: + className: + tls: + enabled: false + secretName: + +redis: + enabled: true + architecture: standalone + fullnameOverride: django-redis + auth: + enabled: false + master: + persistence: + enabled: true + size: .5Gi + storageClass: + +postgresql: + enabled: false + fullnameOverride: "django-postgres" + architecture: standalone + auth: + postgresPassword: "" + database: "" + primary: + persistence: + enabled: true + storageClass: "" + size: 1Gi + +# https://artifacthub.io/packages/helm/bitnami/minio +# extraEnvVars: https://github.com/bitnami/containers/blob/main/bitnami/minio/README.md#environment-variables +minio: + enabled: false + disableWebUI: true + mode: standalone + fullnameOverride: minio + global: + defaultStorageClass: + apiIngress: + enabled: true + ingressClassName: + hostname: + annotations: + nginx.ingress.kubernetes.io/proxy-body-size: "50m" + auth: + forceNewKeys: True + rootUser: minio-user + rootPassword: + persistence: + enabled: true + size: 1Gi + defaultBuckets: media-data,static-data + provisioning: + enabled: true + resourcesPreset: "nano" + cleanupAfterFinished: + enabled: true + extraCommands: + - "mc anonymous set download provisioning/static-data" + +api: + # Not required if global image are set + image: {} + # name: WORKER-SET-BY-CICD-IMAGE + # tag: WORKER-SET-BY-CICD-TAG + # imagePullPolicy: IfNotPresent + enabled: true + replicaCount: 1 + containerPort: 80 + command: ["/code/deploy/run_prod.sh"] + resources: + requests: + cpu: "2" + memory: 0.5Gi + limits: + cpu: "2" + memory: 1Gi + +worker: + # Not required if global image are set + image: {} + # name: WORKER-SET-BY-CICD-IMAGE + # tag: WORKER-SET-BY-CICD-TAG + # imagePullPolicy: IfNotPresent + enabled: true + beat: + image: {} + # name: WORKER-SET-BY-CICD-IMAGE + # tag: WORKER-SET-BY-CICD-TAG + # imagePullPolicy: IfNotPresent + command: ["celery", "-A", "myapp", "beat", "-l", "INFO"] + resources: + requests: + cpu: "1" + memory: 0.5Gi + limits: + cpu: "1" + memory: 1Gi + flower: + image: {} + # name: WORKER-SET-BY-CICD-IMAGE + # tag: WORKER-SET-BY-CICD-TAG + # imagePullPolicy: IfNotPresent + enabled: false # Install flower package first + command: ["celery", "-A", "myapp", "flower", "--port=8000"] + resources: + requests: + cpu: "0.1" + memory: 0.5Gi + limits: + cpu: "1" + memory: 1Gi + queueCommandPrefix: + - "celery" + - "-A" + - "myapp" + - "worker" + - "-l" + - "INFO" + queues: + # NOTE: Make sure keys are lowercase + default: + enabled: true + replicaCount: 1 + celeryArgs: + - "-Q" + - "celery" + - "--concurrency" + - "4" + - "--max-tasks-per-child" + - "10" + resources: + requests: + cpu: "1" + memory: 1Gi + limits: + cpu: "1" + memory: 2Gi + +# Not required if global image are set +argoHook: + enabled: true + image: {} + # name: WORKER-SET-BY-CICD-IMAGE + # tag: WORKER-SET-BY-CICD-TAG + # imagePullPolicy: IfNotPresent + resources: + requests: + cpu: "0.1" + memory: 1Gi + limits: + cpu: "4" + memory: 2Gi + hooks: + # NOTE: Make sure keys are lowercase + db-migrate: + enabled: true + hook: PostSync + preserveHistory: true + command: ["./manage.py", "migrate"] + collect-static: + enabled: true + hook: PostSync + command: ["./manage.py", "collectstatic", "--noinput"] + +envConfigMapName: "" +env: {} + +secretsName: "" +secrets: {} + # # Postgres + # POSTGRES_DB: "{{ $.Values.postgresql.auth.database }}" + # POSTGRES_USER: "postgres" + # POSTGRES_PASSWORD: "{{ $.Values.postgresql.auth.postgresPassword }}" + # POSTGRES_HOST: "{{ include \"postgresql.v1.primary.fullname\" $.Subcharts.postgresql }}" + # POSTGRES_PORT: "{{ include \"postgresql.v1.service.port\" $.Subcharts.postgresql }}" + + # # Redis + # REDIS_URL: "redis://{{ printf \"%s-master\" (include \"common.names.fullname\" .Subcharts.redis) }}:6379/0" + + # # Minio (S3) + # AWS_S3_ENDPOINT_URL: "https://\{{ $.Values.minio.apiIngress.hostname }}/" + # AWS_S3_ACCESS_KEY_ID: "{{ required \".Values.minio.auth.rootUser\" $.Values.minio.auth.rootUser }}" + # AWS_S3_SECRET_ACCESS_KEY: "{{ required \".Values.minio.auth.rootPassword\" $.Values.minio.auth.rootPassword }}" + # AWS_S3_REGION: "us-east-1" + # AWS_S3_BUCKET_STATIC_NAME: static-data + # AWS_S3_BUCKET_MEDIA_NAME: media-data