#
# 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 and (not .Values.elasticsearch.external) (eq .Values.activationStoreBackend "ElasticSearch") }}
---
kind: Service
apiVersion: v1
metadata:
  name: {{ .Release.Name }}-elasticsearch
  labels:
    name: {{ .Release.Name }}-elasticsearch
{{ include "openwhisk.label_boilerplate" . | indent 4 }}
{{- if .Values.elasticsearch.service.labelsHeadless }}
{{ toYaml .Values.elasticsearch.service.labelsHeadless | indent 4 }}
{{- end }}
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
  clusterIP: None # This is needed for statefulset hostnames like elasticsearch-0 to resolve
  # Create endpoints also if the related pod isn't ready
  publishNotReadyAddresses: true
  selector:
    name: {{ .Release.Name }}-elasticsearch
  ports:
  - name: {{ .Values.elasticsearch.service.httpPortName | default "http" }}
    port: {{ .Values.elasticsearch.httpPort }}
  - name: {{ .Values.elasticsearch.service.transportPortName | default "transport" }}
    port: {{ .Values.elasticsearch.transportPort }}
{{- end -}}
