{{- $ctx := dict "helm" . }}
{{- range $name, $app := .Values }}
{{- if and (kindIs "map" $app) $app.enabled ($app.service).enabled }}
{{- $service := $app.service }}
{{- $_ := set $ctx "extraLabels" $service.labels }}
{{- $_ := set $ctx "appKey" $name }}
{{- $fullname := include "vm.plain.fullname" $ctx }}
---
apiVersion: v1
kind: Service
metadata:
  {{- with $service.annotations }}
  annotations: {{ toYaml . | nindent 4 }}
  {{- end }}
  labels: {{ include "vm.labels" $ctx | nindent 4 }}
  {{- $_ := unset $ctx "extraLabels" }}
  name: {{ $fullname }}
  namespace: {{ include "vm.namespace" $ }}
spec:
  {{- $type := $service.type }}
  {{- if and (not $type) (eq $app.mode "statefulSet") }}
    {{- $type = "ClusterIP" }}
  {{- end }}
  type: {{ $type }}
  {{- if eq $type "ClusterIP" }}
  {{- with $service.clusterIP }}
  clusterIP: {{. }}
  {{- end }}
  {{- end }}
  {{- with $service.externalIPs }}
  externalIPs: {{ toYaml . | nindent 4 }}
  {{- end }}
  {{- with $service.loadBalancerIP }}
  loadBalancerIP: {{ . }}
  {{- end }}
  {{- with $service.loadBalancerSourceRanges }}
  loadBalancerSourceRanges: {{ toYaml . | nindent 4 }}
  {{- end }}
  {{- with $service.healthCheckNodePort }}
  healthCheckNodePort: {{ . }}
  {{- end }}
  {{- with $service.externalTrafficPolicy }}
  externalTrafficPolicy: {{ . }}
  {{- end }}
  {{- with $service.ipFamilyPolicy }}
  ipFamilyPolicy: {{ . }}
  {{- end }}
  {{- with $service.ipFamilies }}
  ipFamilies: {{ toYaml . | nindent 4 }}
  {{- end }}
  {{- with $service.trafficDistribution }}
  trafficDistribution: {{ . }}
  {{- end }}
  {{- $portsTpl := printf "%s.ports" $name }}
  {{- with include $portsTpl $app }}
  ports: {{ . | nindent 4 }}
  {{- end }}
  selector: {{ include "vm.selectorLabels" $ctx | nindent 4 }}
{{- end }}
{{- end }}
