apiVersion: v1
kind: Service
metadata:
  {{- if .this.utils.includeNamespace }}
  namespace: {{ .Release.Namespace }}
  {{- end }}
  name: {{ .component.fullName }}
  labels:
    {{- include "nplus.instanceLabels" . | nindent 4 }}
  annotations:
    {{- include "nplus.argoWave" . | nindent 4 }}
    {{- include "nplus.annotations" . | nindent 4 }}
    {{- include "nplus.securityAnnotations" . | nindent 4 }}
    {{- include "nplus.serviceAnnotations" . | nindent 4 }}
spec:

  # this is a "headless service", no cluster IP is defined
  # as none of the internal components need to access this service.
  # It is purely used to collect the EndPointSlices
  type: ClusterIP
  clusterIP: None
  ports:
    {{- include "nplus.defaultServicePorts" . | nindent 4 }}
  selector:
  {{- if eq .this.service.selector "component" }}
    {{- include "nplus.selectorLabels" . | nindent 4 }}
  {{- else if eq .this.service.selector "type" }}{{/* if eq .this.service.selector "component" else if eq .this.service.selector "type" */}}
    {{- include "nplus.selectorLabelsNc" . | nindent 4 }}
  {{- else }}{{/* if eq .this.service.selector "component" */}}
    {{- fail (printf "Unknown Service Selector Type: %s - must be component or type" .this.service.selector) }}
  {{- end }}{{/* if eq .this.service.selector "component" else */}}