# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
{{- if .Values.manifests.deployment_sink }}

{{- $envAll := . }}
{{- $mounts_designate_sink := .Values.pod.mounts.designate_sink.designate_sink }}
{{- $mounts_designate_sink_init := .Values.pod.mounts.designate_sink.init_container }}

{{- $serviceAccountName := "designate-sink" }}
{{ tuple $envAll "sink" $serviceAccountName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: designate-sink
  annotations:
    {{ tuple $envAll | include "helm-toolkit.snippets.release_uuid" }}
  labels:
{{ tuple $envAll "designate" "sink" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
spec:
  replicas: {{ .Values.pod.replicas.sink }}
  selector:
    matchLabels:
{{ tuple $envAll "designate" "sink" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 6 }}
{{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
  template:
    metadata:
      labels:
{{ tuple $envAll "designate" "sink" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 8 }}
      annotations:
{{ tuple $envAll | include "helm-toolkit.snippets.release_uuid" | indent 8 }}
        configmap-bin-hash: {{ tuple "configmap-bin.yaml" . | include "helm-toolkit.utils.hash" }}
        configmap-etc-hash: {{ tuple "configmap-etc.yaml" . | include "helm-toolkit.utils.hash" }}
    spec:
{{ with .Values.pod.priorityClassName.designate_sink }}
      priorityClassName: {{ . }}
{{ end }}
{{ with .Values.pod.runtimeClassName.designate_sink }}
      runtimeClassName: {{ . }}
{{ end }}
      serviceAccountName: {{ $serviceAccountName }}
      affinity:
{{ tuple $envAll "designate" "sink" | include "helm-toolkit.snippets.kubernetes_pod_anti_affinity" | indent 8 }}
      nodeSelector:
        {{ .Values.labels.sink.node_selector_key }}: {{ .Values.labels.sink.node_selector_value }}
      initContainers:
{{ tuple $envAll "sink" $mounts_designate_sink_init | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }}
      containers:
        - name: designate-sink
{{ tuple $envAll "designate_sink" | include "helm-toolkit.snippets.image" | indent 10 }}
{{ tuple $envAll $envAll.Values.pod.resources.sink | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }}
{{ dict "envAll" $envAll "application" "designate" "container" "designate_sink" | include "helm-toolkit.snippets.kubernetes_container_security_context" | indent 10 }}
          command:
            - bash
            - /tmp/designate-sink.sh
          volumeMounts:
            - name: designate-bin
              mountPath: /tmp/designate-sink.sh
              subPath: designate-sink.sh
              readOnly: true
            - name: pod-etc-designate
              mountPath: /etc/designate
            - name: pod-var-cache-designate
              mountPath: /var/cache/designate
            - name: designate-etc
              mountPath: /etc/designate/designate.conf
              subPath: designate.conf
              readOnly: true
            - name: designate-etc
              mountPath: /etc/designate/policy.yaml
              subPath: policy.yaml
              readOnly: true
            {{- if .Values.conf.designate.DEFAULT.log_config_append }}
            - name: designate-etc
              mountPath: {{ .Values.conf.designate.DEFAULT.log_config_append }}
              subPath: {{ base .Values.conf.designate.DEFAULT.log_config_append }}
              readOnly: true
            {{- end }}
{{ if $mounts_designate_sink.volumeMounts }}{{ toYaml $mounts_designate_sink.volumeMounts | indent 12 }}{{ end }}
      volumes:
        - name: pod-etc-designate
          emptyDir: {}
        - name: pod-var-cache-designate
          emptyDir: {}
        - name: designate-bin
          configMap:
            name: designate-bin
            defaultMode: 0555
        - name: designate-etc
          secret:
            secretName: designate-etc
            defaultMode: 0444
{{ if $mounts_designate_sink.volumes }}{{ toYaml $mounts_designate_sink.volumes | indent 8 }}{{ end }}
{{- end }}
