{{ if .Values.imageRenderer.enabled }}
{{- $root := . -}}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "grafana.fullname" . }}-image-renderer
  namespace: {{ include "grafana.namespace" . }}
  labels:
    {{- include "grafana.imageRenderer.labels" . | nindent 4 }}
    {{- with .Values.imageRenderer.labels }}
    {{- toYaml . | nindent 4 }}
    {{- end }}
  {{- with .Values.imageRenderer.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
  {{- if and (not .Values.imageRenderer.autoscaling.enabled) (.Values.imageRenderer.replicas) }}
  replicas: {{ .Values.imageRenderer.replicas }}
  {{- end }}
  revisionHistoryLimit: {{ .Values.imageRenderer.revisionHistoryLimit }}
  selector:
    matchLabels:
      {{- include "grafana.imageRenderer.selectorLabels" . | nindent 6 }}

  {{- with .Values.imageRenderer.deploymentStrategy }}
  strategy:
    {{- toYaml . | trim | nindent 4 }}
  {{- end }}
  template:
    metadata:
      labels:
        {{- include "grafana.imageRenderer.selectorLabels" . | nindent 8 }}
        {{- with .Values.imageRenderer.podLabels }}
        {{- toYaml . | nindent 8 }}
        {{- end }}
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
        {{- with .Values.imageRenderer.podAnnotations }}
        {{- toYaml . | nindent 8 }}
        {{- end }}
    spec:
      {{- with .Values.imageRenderer.schedulerName }}
      schedulerName: "{{ . }}"
      {{- end }}
      {{- with .Values.imageRenderer.serviceAccountName }}
      serviceAccountName: "{{ . }}"
      {{- end }}
      automountServiceAccountToken: {{ .Values.imageRenderer.automountServiceAccountToken }}
      {{- if kindIs "bool" .Values.imageRenderer.hostUsers }}
      hostUsers: {{ .Values.imageRenderer.hostUsers }}
      {{- end }}
      {{- with .Values.imageRenderer.securityContext }}
      securityContext:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      {{- with .Values.imageRenderer.hostAliases }}
      hostAliases:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      {{- with .Values.imageRenderer.priorityClassName }}
      priorityClassName: {{ . }}
      {{- end }}
      {{- if or .Values.imageRenderer.image.pullSecrets .Values.global.imagePullSecrets }}
      imagePullSecrets:
        {{- include "grafana.imagePullSecrets" (dict "root" $root "imagePullSecrets" .Values.imageRenderer.image.pullSecrets) | nindent 8 }}
      {{- end }}
      containers:
        - name: {{ .Chart.Name }}-image-renderer
          {{- $registry := .Values.global.imageRegistry | default .Values.imageRenderer.image.registry -}}
          {{- if .Values.imageRenderer.image.sha }}
          image: "{{ $registry }}/{{ .Values.imageRenderer.image.repository }}:{{ .Values.imageRenderer.image.tag }}@sha256:{{ .Values.imageRenderer.image.sha }}"
          {{- else }}
          image: "{{ $registry }}/{{ .Values.imageRenderer.image.repository }}:{{ .Values.imageRenderer.image.tag }}"
          {{- end }}
          imagePullPolicy: {{ .Values.imageRenderer.image.pullPolicy }}
          {{- if .Values.imageRenderer.command }}
          command:
            {{- range .Values.imageRenderer.command }}
            - {{ . }}
            {{- end }}
          {{- end}}
          ports:
            - name: {{ .Values.imageRenderer.service.portName }}
              containerPort: {{ .Values.imageRenderer.service.targetPort }}
              protocol: TCP
          livenessProbe:
            httpGet:
              path: {{ .Values.imageRenderer.healthcheckPath }}
              port: {{ .Values.imageRenderer.service.portName }}
          env:
            - name: HTTP_PORT
              value: {{ .Values.imageRenderer.service.targetPort | quote }}
          {{- if .Values.imageRenderer.serviceMonitor.enabled }}
            - name: ENABLE_METRICS
              value: "true"
          {{- end }}
          {{- range $key, $value := .Values.imageRenderer.envValueFrom }}
            - name: {{ $key | quote }}
              valueFrom:
                {{- tpl (toYaml $value) $ | nindent 16 }}
          {{- end }}
          {{- range $key, $value := .Values.imageRenderer.env }}
            - name: {{ $key | quote }}
              value: {{ $value | quote }}
          {{- end }}
          {{- with .Values.imageRenderer.containerSecurityContext }}
          securityContext:
            {{- toYaml . | nindent 12 }}
          {{- end }}
          volumeMounts:
            - mountPath: /tmp
              name: image-renderer-tmpfs
            {{- range .Values.imageRenderer.extraConfigmapMounts }}
            - name: {{ tpl .name $root }}
              mountPath: {{ tpl .mountPath $root }}
              subPath: {{ tpl (.subPath | default "") $root }}
              readOnly: {{ .readOnly }}
            {{- end }}
            {{- range .Values.imageRenderer.extraSecretMounts }}
            - name: {{ .name }}
              mountPath: {{ .mountPath }}
              readOnly: {{ .readOnly }}
              subPath: {{ .subPath | default "" }}
            {{- end }}
            {{- range .Values.imageRenderer.extraVolumeMounts }}
            - name: {{ .name }}
              mountPath: {{ .mountPath }}
              subPath: {{ .subPath | default "" }}
              readOnly: {{ .readOnly }}
            {{- end }}
          {{- with .Values.imageRenderer.resources }}
          resources:
            {{- toYaml . | nindent 12 }}
          {{- end }}
      {{- with .Values.imageRenderer.nodeSelector }}
      nodeSelector:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      {{- with .Values.imageRenderer.affinity }}
      affinity:
        {{- tpl (toYaml .) $root | nindent 8 }}
      {{- end }}
      {{- with .Values.imageRenderer.tolerations }}
      tolerations:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      volumes:
        - name: image-renderer-tmpfs
          emptyDir: {}
        {{- range .Values.imageRenderer.extraConfigmapMounts }}
        - name: {{ tpl .name $root }}
          configMap:
            name: {{ tpl .configMap $root }}
            {{- with .items }}
            items:
              {{- toYaml . | nindent 14 }}
            {{- end }}
        {{- end }}
        {{- range .Values.imageRenderer.extraSecretMounts }}
        {{- if .secretName }}
        - name: {{ .name }}
          secret:
            secretName: {{ .secretName }}
            defaultMode: {{ .defaultMode }}
            {{- with .items }}
            items:
              {{- toYaml . | nindent 14 }}
            {{- end }}
        {{- else if .projected }}
        - name: {{ .name }}
          projected:
            {{- toYaml .projected | nindent 12 }}
        {{- else if .csi }}
        - name: {{ .name }}
          csi:
            {{- toYaml .csi | nindent 12 }}
        {{- end }}
        {{- end }}
        {{- range .Values.imageRenderer.extraVolumes }}
        - name: {{ .name }}
          {{- if .existingClaim }}
          persistentVolumeClaim:
            claimName: {{ .existingClaim }}
          {{- else if .hostPath }}
          hostPath:
            {{ toYaml .hostPath | nindent 12 }}
          {{- else if .csi }}
          csi:
            {{- toYaml .csi | nindent 12 }}
          {{- else if .configMap }}
          configMap:
            {{- toYaml .configMap | nindent 12 }}
          {{- else if .emptyDir }}
          emptyDir:
            {{- toYaml .emptyDir | nindent 12 }}
          {{- else }}
          emptyDir: {}
          {{- end }}
        {{- end }}
{{- end }}
