apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "name" . }}
  namespace: {{ .Release.Namespace }}
{{-  if .Values.ignoreResources }}
  annotations:
    resources.gardener.cloud/ignore: "true"
{{- end }}
  labels:
{{ include "labels" . | indent 4 }}
spec:
  revisionHistoryLimit: 0
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
{{ include "labels" . | indent 6 }}
  template:
    metadata:
      annotations:
        {{- if .Values.imageVectorOverwrite }}
        checksum/configmap-gcp-imagevector-overwrite: {{ include (print $.Template.BasePath "/configmap-imagevector-overwrite.yaml") . | sha256sum }}
        {{- end }}
        checksum/configmap-{{ include "name" . }}-config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
      labels:
{{ include "labels" . | indent 8 }}
    spec:
      containers:
      - name: {{ include "name" . }}
        image: {{ include "image" . }}
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        command:
        - /gardener-extension-provider-gcp
        - --backupbucket-max-concurrent-reconciles={{ .Values.controllers.backupbucket.concurrentSyncs }}
        - --backupentry-max-concurrent-reconciles={{ .Values.controllers.backupentry.concurrentSyncs }}
        - --config-file=/etc/{{ include "name" . }}/config/config.yaml
        - --controlplane-max-concurrent-reconciles={{ .Values.controllers.controlplane.concurrentSyncs }}
        - --csimigration-max-concurrent-reconciles={{ .Values.controllers.csimigration.concurrentSyncs }}
        - --infrastructure-max-concurrent-reconciles={{ .Values.controllers.infrastructure.concurrentSyncs }}
        - --ignore-operation-annotation={{ .Values.controllers.ignoreOperationAnnotation }}
        - --worker-max-concurrent-reconciles={{ .Values.controllers.worker.concurrentSyncs }}
        - --webhook-config-namespace={{ .Release.Namespace }}
        - --webhook-config-server-port={{ .Values.webhookConfig.serverPort }}
        - --disable-controllers={{ .Values.disableControllers | join "," }}
        - --disable-webhooks={{ .Values.disableWebhooks | join "," }}
        env:
        - name: LEADER_ELECTION_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        {{- if .Values.imageVectorOverwrite }}
        - name: IMAGEVECTOR_OVERWRITE
          value: /charts_overwrite/images_overwrite.yaml
        {{- end }}
        ports:
        - name: webhook-server
          containerPort: {{ .Values.webhookConfig.serverPort }}
          protocol: TCP
{{- if .Values.resources }}
        resources:
{{ toYaml .Values.resources | nindent 10 }}
{{- end }}
        volumeMounts:
        - name: config
          mountPath: /etc/{{ include "name" . }}/config
        {{- if .Values.imageVectorOverwrite }}
        - name: imagevector-overwrite
          mountPath: /charts_overwrite/
          readOnly: true
        {{- end }}
      serviceAccountName: {{ include "name" . }}
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: {{ include "labels.app.key" . }}
                operator: In
                values:
                - {{ include "labels.app.value" . }}
            topologyKey: "kubernetes.io/hostname"
      volumes:
      - name: config
        configMap:
          name: {{ include "name" . }}-configmap
          defaultMode: 420
      {{- if .Values.imageVectorOverwrite }}
      - name: imagevector-overwrite
        configMap:
          name: {{ include "name" . }}-imagevector-overwrite
          defaultMode: 420
      {{- end }}
