{{- range $processName, $config := .Values.processes }}
{{- if not (and (hasKey $config "cron") (hasKey $config.cron "id")) }}
# Skip {{ $processName }} as it is not a cron job
{{- continue }}
{{- end }}
---
apiVersion: batch/v1
kind: CronJob
metadata:
  annotations:
    app.kubernetes.io/version: {{ $.Values.global.deployment_id | quote }}
    dokku.com/builder-type: {{ $.Values.global.image.type }}
    dokku.com/cron-id: {{ $config.cron.id }}
    dokku.com/job-suffix: {{ $config.cron.suffix }}
    dokku.com/managed: "true"
    kubectl.kubernetes.io/default-container: {{ $.Values.global.app_name }}-cron
    {{ include "print.annotations" (dict "config" $.Values.global "key" "cronjob") | indent 4 }}
    {{ include "print.annotations" (dict "config" $config "key" "cronjob") | indent 4 }}
  labels:
    app.kubernetes.io/instance: {{ $.Values.global.app_name }}-cron-{{ $config.cron.suffix }}
    app.kubernetes.io/name: cron
    app.kubernetes.io/part-of: {{ $.Values.global.app_name }}
    dokku.com/cron-id: {{ $config.cron.id }}
    {{ include "print.labels" (dict "config" $.Values.global "key" "cronjob") | indent 4 }}
    {{ include "print.labels" (dict "config" $config "key" "cronjob") | indent 4 }}
  name: {{ $.Values.global.app_name }}-cron-{{ $config.cron.suffix }}
  namespace: {{ $.Values.global.namespace }}
spec:
  concurrencyPolicy: {{ $config.cron.concurrency_policy }}
  failedJobsHistoryLimit: 10
  jobTemplate:
    metadata:
      annotations:
        app.kubernetes.io/version: {{ $.Values.global.deployment_id | quote }}
        dokku.com/builder-type: {{ $.Values.global.image.type }}
        dokku.com/cron-id: {{ $config.cron.id }}
        dokku.com/job-suffix: {{ $config.cron.suffix }}
        dokku.com/managed: "true"
        kubectl.kubernetes.io/default-container: {{ $.Values.global.app_name }}-cron
        {{ include "print.annotations" (dict "config" $.Values.global "key" "job") | indent 8 }}
        {{ include "print.annotations" (dict "config" $config "key" "job") | indent 8 }}
      labels:
        app.kubernetes.io/instance: {{ $.Values.global.app_name }}-cron-{{ $config.cron.suffix }}
        app.kubernetes.io/name: cron
        app.kubernetes.io/part-of: {{ $.Values.global.app_name }}
        dokku.com/cron-id: {{ $config.cron.id }}
        {{ include "print.labels" (dict "config" $.Values.global "key" "job") | indent 8 }}
        {{ include "print.labels" (dict "config" $config "key" "job") | indent 8 }}
    spec:
      backoffLimit: 0
      podReplacementPolicy: Failed
      ttlSecondsAfterFinished: 60
      activeDeadlineSeconds: 86400
      template:
        metadata:
          annotations:
            app.kubernetes.io/version: {{ $.Values.global.deployment_id | quote }}
            dokku.com/builder-type: {{ $.Values.global.image.type }}
            dokku.com/cron-id: {{ $config.cron.id }}
            dokku.com/job-suffix: {{ $config.cron.suffix }}
            dokku.com/managed: "true"
            kubectl.kubernetes.io/default-container: {{ $.Values.global.app_name }}-cron
            {{ include "print.annotations" (dict "config" $.Values.global "key" "pod") | indent 12 }}
            {{ include "print.annotations" (dict "config" $config "key" "pod") | indent 12 }}
          labels:
            app.kubernetes.io/instance: {{ $.Values.global.app_name }}-cron-{{ $config.cron.suffix }}
            app.kubernetes.io/name: cron
            app.kubernetes.io/part-of: {{ $.Values.global.app_name }}
            dokku.com/cron-id: {{ $config.cron.id }}
            {{ include "print.labels" (dict "config" $.Values.global "key" "pod") | indent 12 }}
            {{ include "print.labels" (dict "config" $config "key" "pod") | indent 12 }}
        spec:
          containers:
          - args:
            {{- range $config.args }}
            - {{ . }}
            {{- end }}
            envFrom:
            - secretRef:
                name: env-{{ $.Values.global.app_name }}.{{ $.Values.global.deployment_id }}
                optional: true
            image: {{ $.Values.global.image.name }}
            imagePullPolicy: Always
            name: {{ $.Values.global.app_name }}-cron
            {{- if and $config.resources (or $config.resources.limits $config.resources.requests) }}
            resources:
              {{- if $config.resources.limits }}
              limits:
                {{- if $config.resources.limits.cpu }}
                cpu: {{ $config.resources.limits.cpu }}
                {{- end }}
                {{- if $config.resources.limits.memory }}
                memory: {{ $config.resources.limits.memory }}
                {{- end }}
              {{- end }}
              {{- if $config.resources.requests }}
              requests:
                {{- if $config.resources.requests.cpu }}
                cpu: {{ $config.resources.requests.cpu }}
                {{- end }}
                {{- if $config.resources.requests.memory }}
                memory: {{ $config.resources.requests.memory }}
                {{- end }}
              {{- end }}
            {{- end }}
            {{- if hasKey $.Values.global "security_context" }}
            securityContext:
              {{- if $.Values.global.security_context.privileged }}
              privileged: true
              {{- end }}
              {{- if hasKey $.Values.global.security_context "capabilities" }}
              capabilities:
                {{- if hasKey $.Values.global.security_context.capabilities "add" }}
                add:
                  {{- range $.Values.global.security_context.capabilities.add }}
                  - {{ . }}
                  {{- end }}
                {{- end }}
                {{- if hasKey $.Values.global.security_context.capabilities "drop" }}
                drop:
                  {{- range $.Values.global.security_context.capabilities.drop }}
                  - {{ . }}
                  {{- end }}
                {{- end }}
              {{- end }}
            {{- end }}
            {{- if $.Values.global.image.working_dir }}
            workingDir: {{ $.Values.global.image.working_dir }}
            {{- end }}
          {{- if $.Values.global.image.image_pull_secrets }}
          imagePullSecrets:
          - name: {{ $.Values.global.image.image_pull_secrets }}
          {{- end }}
          restartPolicy: Never
          serviceAccountName: {{ $.Values.global.app_name }}
  schedule: {{ $config.cron.schedule }}
  startingDeadlineSeconds: 60
  successfulJobsHistoryLimit: 10
  suspend: {{ $config.cron.suspend }}
  timeZone: Etc/UTC
{{- end }}
