# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.router.enabled -}}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "druid.router.fullname" . }}
  labels:
    app: {{ include "druid.name" . }}
    chart: {{ include "druid.chart" . }}
    component: {{ .Values.router.name }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  replicas: {{ .Values.router.replicaCount }}
  selector:
    matchLabels:
      app: {{ include "druid.name" . }}
      release: {{ .Release.Name }}
      component: {{ .Values.router.name }}
  template:
    metadata:
      labels:
        app: {{ include "druid.name" . }}
        release: {{ .Release.Name }}
        component: {{ .Values.router.name }}
      {{- with .Values.router.podAnnotations }}
      annotations:
{{ toYaml . | indent 8 }}
      {{- end }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          args: [ "router" ]
          env:
          {{- range $key, $val := .Values.router.config }}
          - name: {{ $key }}
            value: {{ $val | quote }}
          {{- end}}
          envFrom:
            - configMapRef:
                name: {{ template "druid.name" . }} 
          ports:
            - name: http
              containerPort: {{ .Values.router.port }}
              protocol: TCP
          livenessProbe:
            initialDelaySeconds: 60
            httpGet:
              path: /status/health
              port: {{ .Values.router.port }}
          readinessProbe:
            initialDelaySeconds: 60
            httpGet:
              path: /status/health
              port: {{ .Values.router.port }}
          resources:
{{ toYaml .Values.router.resources | indent 12 }}
    {{- with .Values.router.nodeSelector }}
      nodeSelector:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.router.affinity }}
      affinity:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.router.tolerations }}
      tolerations:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.image.pullSecrets }}
      imagePullSecrets:
{{ toYaml . | indent 8 }}
    {{- end }}
{{- end }}
