#  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.

apiVersion: v1
kind: Service
metadata:
  name: {{ include "ats-ingress.fullname" . }}
  namespace: {{ .Release.Namespace }}
  labels:
    app.kubernetes.io/name: {{ include "ats-ingress.name" . }}
    helm.sh/chart: {{ include "ats-ingress.chart" . }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/version: {{ .Chart.AppVersion }}
{{- if .Values.controller.service.labels }}
{{ toYaml .Values.controller.service.labels | indent 4 }}
{{- end }}
  annotations:
{{- range $key, $value := .Values.controller.service.annotations }}
    {{ $key }}: {{ $value | quote }}
{{- end }}
spec:
  {{ with .Values.controller.service.clusterIP }}clusterIP: {{ . }}{{ end }}
  type: {{ .Values.controller.service.type }}
  {{- if .Values.controller.service.externalTrafficPolicy }}
  externalTrafficPolicy: {{ .Values.controller.service.externalTrafficPolicy }}
  {{- end }}
  {{- if .Values.controller.service.healthCheckNodePort }}
  healthCheckNodePort: {{ .Values.controller.service.healthCheckNodePort }}
  {{- end }}
  ports:
    - name: http
      port: {{ .Values.controller.service.http.port }}
      protocol: TCP
      targetPort: {{ .Values.controller.service.http.targetPort }}
      nodePort: {{ .Values.controller.service.http.nodePort }}
    - name: https
      port: {{ .Values.controller.service.https.port }}
      protocol: TCP
      targetPort: {{ .Values.controller.service.https.targetPort }}
      nodePort: {{ .Values.controller.service.https.nodePort }}
  selector:
    app.kubernetes.io/name: {{ template "ats-ingress.name" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
  {{- if .Values.controller.service.sessionAffinity }}
  sessionAffinity: {{ .Values.controller.service.sessionAffinity }}
  {{- end }}
  externalIPs:
{{- if .Values.controller.service.externalIPs }}
{{ toYaml .Values.controller.service.externalIPs | indent 4 }}
{{- end -}}
{{- if (eq .Values.controller.service.type "LoadBalancer") }}
{{- if .Values.controller.service.loadBalancerIP }}
  loadBalancerIP: "{{ .Values.controller.service.loadBalancerIP }}"
{{- end }}
{{- if .Values.controller.service.loadBalancerSourceRanges }}
  loadBalancerSourceRanges:
{{ toYaml .Values.controller.service.loadBalancerSourceRanges | indent 4 }}
{{- end }}
{{- end }}
