# 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_mdns }}

{{- $envAll := . }}
{{- $mounts_designate_mdns := .Values.pod.mounts.designate_mdns.designate_mdns }}
{{- $mounts_designate_mdns_init := .Values.pod.mounts.designate_mdns.init_container }}

{{- $serviceAccountName := "designate-mdns" }}
{{ tuple $envAll "mdns" $serviceAccountName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: designate-mdns
  annotations:
    {{ tuple $envAll | include "helm-toolkit.snippets.release_uuid" }}
  labels:
{{ tuple $envAll "designate" "mdns" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
spec:
  replicas: {{ .Values.pod.replicas.mdns }}
  selector:
    matchLabels:
{{ tuple $envAll "designate" "mdns" | 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" "mdns" | 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_mdns }}
      priorityClassName: {{ . }}
{{ end }}
{{ with .Values.pod.runtimeClassName.designate_mdns }}
      runtimeClassName: {{ . }}
{{ end }}
      serviceAccountName: {{ $serviceAccountName }}
{{ dict "envAll" $envAll "application" "designate" | include "helm-toolkit.snippets.kubernetes_pod_security_context" | indent 6 }}
      affinity:
{{ tuple $envAll "designate" "mdns" | include "helm-toolkit.snippets.kubernetes_pod_anti_affinity" | indent 8 }}
      nodeSelector:
        {{ .Values.labels.mdns.node_selector_key }}: {{ .Values.labels.mdns.node_selector_value }}
      terminationGracePeriodSeconds: {{ .Values.pod.lifecycle.termination_grace_period.mdns.timeout | default "30" }}
      initContainers:
{{ tuple $envAll "mdns" $mounts_designate_mdns_init | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }}
      containers:
        - name: designate-mdns
{{ tuple $envAll "designate_mdns" | include "helm-toolkit.snippets.image" | indent 10 }}
{{ tuple $envAll $envAll.Values.pod.resources.mdns | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }}
{{ dict "envAll" $envAll "application" "designate" "container" "designate_mdns" | include "helm-toolkit.snippets.kubernetes_container_security_context" | indent 10 }}
          ports:
            - name: d-mdns
              containerPort: {{ tuple "mdns" "internal" "ipc" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
            - name: d-mdns-udp
              containerPort: {{ tuple "mdns" "internal" "ipc" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
              protocol: UDP
          readinessProbe:
            tcpSocket:
              port: {{ tuple "mdns" "internal" "ipc" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
          command:
            - bash
            - /tmp/designate-mdns.sh
          volumeMounts:
            - name: designate-bin
              mountPath: /tmp/designate-mdns.sh
              subPath: designate-mdns.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/api-paste.ini
              subPath: api-paste.ini
              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_mdns.volumeMounts }}{{ toYaml $mounts_designate_mdns.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_mdns.volumes }}{{ toYaml $mounts_designate_mdns.volumes | indent 8 }}{{ end }}
{{- end }}
