apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "portalmodelo.fullname" . }}-plone
  labels:
    {{- include "portalmodelo.labels" . | nindent 4 }}
spec:
  {{- if not .Values.autoscaling.enabled }}
  replicas: {{ .Values.replicaCount }}
  {{- end }}
  strategy:
  {{- if .Values.instance.zeoclient }}
    type: RollingUpdate
  {{- else }}
    type: Recreate
  {{- end }}
  selector:
    matchLabels:
      {{- include "portalmodelo.ploneSelectorLabels" . | nindent 6 }}
  template:
    metadata:
    {{- with .Values.podAnnotations }}
      annotations:
        {{- toYaml . | nindent 8 }}
    {{- end }}
      labels:
        {{- include "portalmodelo.ploneSelectorLabels" . | nindent 8 }}
    spec:
      {{- with .Values.imagePullSecrets }}
      imagePullSecrets:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      securityContext:
        {{- toYaml .Values.podSecurityContext | nindent 8 }}
      initContainers:
      {{- if not .Values.instance.zeoclient }}
        - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
          name: {{ .Release.Name }}-rmlock
          command:
            - "rm"
            - "-f"
            - "/data/filestorage/Data.fs.lock"
          volumeMounts:
            - mountPath: /data
              name: data
        - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
          name: {{ .Release.Name }}-initplone
          command:
            - "mkdir"
            - "-p"
            - "/data/filestorage"
            - "/data/blobstorage"
            - "/data/instance"
            - "/data/log"
          volumeMounts:
            - mountPath: /data
              name: data
      {{- end }}
      containers:
        - env:
          {{- if .Values.instance.zeoclient }}
          - name: ZEO_ADDRESS
            value: {{ template "portalmodelo.fullname" . }}-zeoserver:8100
            {{- if eq .Values.persistence.accessMode "ReadWriteMany"}}
          - name: ZEO_SHARED_BLOB_DIR
            value: "on"
            {{- end }}
          {{- end }}
          - name: TZ
            value: {{ .Values.portal.timeZone }}
          - name: ZODB_CACHE_SIZE
            value: "{{ .Values.instance.zodbCacheSize }}"
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          name: {{ .Release.Name }}-plone
          ports:
            - containerPort: 8080
            - containerPort: 8881
          livenessProbe:
            exec:
              command:
                - /plone/instance/bin/instance
                - monitor
                - health_ok
            initialDelaySeconds: 180
            failureThreshold: 2
            periodSeconds: 400
            successThreshold: 1
            timeoutSeconds: 5
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /
              port: 8080
            initialDelaySeconds: 90
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 2
          {{- if eq .Values.persistence.accessMode "ReadWriteMany" }}
          volumeMounts:
            - mountPath: /data
              name: data
          {{- end }}
          resources:
            {{- toYaml .Values.resources.plone | nindent 12 }}
      restartPolicy: Always
      {{- if and .Values.persistence.enabled (not .Values.instance.zeoclient) }}
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: {{ include "portalmodelo.fullname" . }}-data
      {{- end }}
      {{- with .Values.nodeSelector }}
      nodeSelector:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      affinity:
      {{- if .Values.instance.zeoclient }}
        podAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 50
              podAffinityTerm:
                labelSelector:
                  matchExpressions:
                  - key: app.kubernetes.io/name
                    operator: In
                    values:
                    - {{ include "portalmodelo.name" . }}
                  - key: app.kubernetes.io/component
                    operator: In
                    values:
                    - zeoserver
                  - key: app.kubernetes.io/instance
                    operator: In
                    values:
                    - {{ .Release.Name }}
                topologyKey: kubernetes.io/hostname
      {{- end }}
      {{- with .Values.affinity }}
      {{- toYaml . | nindent 8 }}
      {{- end }}
      {{- with .Values.tolerations }}
      tolerations:
      {{- toYaml . | nindent 8 }}
      {{- end }}