# Copyright © 2017 Amdocs, Bell Canada
#
# Licensed 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 "common.servicename" . }}
  namespace: {{ include "common.namespace" . }}
  labels:
    app: {{ include "common.name" . }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ include "common.release" . }}
    heritage: {{ .Release.Service }}
  annotations:
    msb.onap.org/service-info: '[
      {
          "serviceName": "sdnc",
          "version": "v1",
          "url": "/",
          "protocol": "REST",
          "port": "{{ .Values.service.externalPort }}",
          "visualRange":"1",
          "path": "/"
      }
      ]'
spec:
  type: NodePort
  ports:
    - name: "{{ .Values.service.portName }}-restconf"
      {{ if not .Values.global.aafEnabled }}
      port: {{ .Values.service.externalPort }}
      targetPort: {{ .Values.service.internalPort }}
      {{- else -}}
      port: {{ .Values.service.externalPort4 }}
      targetPort: {{ .Values.service.internalPort4 }}
      {{ end }}
      nodePort: {{ .Values.global.nodePortPrefix | default .Values.nodePortPrefix }}{{ .Values.service.nodePort4 }}
  selector:
    app: {{ include "common.name" . }}
    release: {{ include "common.release" . }}
---
apiVersion: v1
kind: Service
metadata:
  name: "{{ .Values.service.name }}-oam"
  namespace: {{ include "common.namespace" . }}
  labels:
    app: {{ include "common.name" . }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ include "common.release" . }}
    heritage: {{ .Release.Service }}
spec:
  type: ClusterIP
  ports:
    - name: "{{ .Values.service.portName }}-restconf-alt"
      {{ if .Values.global.aafEnabled }}
      port: {{ .Values.service.externalPort }}
      targetPort: {{ .Values.service.internalPort }}
      {{- else -}}
      port: {{ .Values.service.internalPort4 }}
      target: {{ .Values.service.internalPort4 }}
      {{ end }}
    - name: "{{ .Values.service.portName }}-karaf"
      port: {{ .Values.service.externalPort2 }}
      targetPort: {{ .Values.service.internalPort2 }}
  selector:
    app: {{ include "common.name" . }}
    release: {{ include "common.release" . }}
---
apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.service.portName }}-cluster
  namespace: {{ include "common.namespace" . }}
  labels:
    app: {{ include "common.name" . }}
    release: {{ include "common.release" . }}
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
  ports:
   - name: "{{ .Values.service.portName }}-cluster-port"
     port: {{ .Values.service.clusterPort }}
  clusterIP: None
  selector:
    app: {{ include "common.name" . }}
    release: {{ include "common.release" . }}
  sessionAffinity: None
  type: ClusterIP

{{ if .Values.config.geoEnabled }}
---
apiVersion: v1
kind: Service
metadata:
  name: sdnhost-{{ include "common.servicename" . }}-0
  namespace: {{ .Release.Namespace }}
  labels:
    statefulset.kubernetes.io/pod-name: {{ include "common.fullname" . }}-0
spec:
  ports:
  - name: {{ .Values.service.portName }}-0-port-{{ .Values.service.internalPort4 }}
    port: {{ .Values.service.clusterPort2 }}
    targetPort: {{ .Values.service.internalPort4 }}
    nodePort: {{ .Values.global.nodePortPrefixExt | default .Values.nodePortPrefixExt }}{{ .Values.service.geoNodePort4 }}
  - name: {{ .Values.service.portName }}-0-port-{{ .Values.service.internalPort }}
    port: {{ .Values.service.clusterPort3 }}
    targetPort: {{ .Values.service.internalPort }}
    nodePort: {{ .Values.global.nodePortPrefixExt | default .Values.nodePortPrefixExt }}{{ .Values.service.geoNodePort1 }}
  type: NodePort
  selector:
    statefulset.kubernetes.io/pod-name: {{ include "common.fullname" . }}-0
{{ end }}
{{ if .Values.config.geoEnabled }}
---
apiVersion: v1
kind: Service
metadata:
  name: sdnhost-{{ include "common.servicename" . }}-1
  namespace: {{ .Release.Namespace }}
  labels:
    statefulset.kubernetes.io/pod-name: {{ include "common.fullname" . }}-1
spec:
  ports:
  - name: {{ .Values.service.portName }}-1-port-{{ .Values.service.internalPort4 }}
    port: {{ .Values.service.clusterPort2 }}
    targetPort: {{ .Values.service.internalPort4 }}
    nodePort: {{ .Values.global.nodePortPrefixExt | default .Values.nodePortPrefixExt }}{{ .Values.service.geoNodePort5 }}
  - name: {{ .Values.service.portName }}-1-port-{{ .Values.service.internalPort }}
    port: {{ .Values.service.clusterPort3 }}
    targetPort: {{ .Values.service.internalPort }}
    nodePort: {{ .Values.global.nodePortPrefixExt | default .Values.nodePortPrefixExt }}{{ .Values.service.geoNodePort2 }}
  type: NodePort
  selector:
    statefulset.kubernetes.io/pod-name: {{ include "common.fullname" . }}-1
{{ end }}
{{ if .Values.config.geoEnabled }}
---
apiVersion: v1
kind: Service
metadata:
  name: sdnhost-{{ include "common.servicename" . }}-2
  namespace: {{ .Release.Namespace }}
  labels:
    statefulset.kubernetes.io/pod-name: {{ include "common.fullname" . }}-2
spec:
  ports:
  - name: {{ .Values.service.portName }}-2-port-{{ .Values.service.internalPort4 }}
    port: {{ .Values.service.clusterPort2 }}
    targetPort: {{ .Values.service.internalPort4 }}
    nodePort: {{ .Values.global.nodePortPrefixExt | default .Values.nodePortPrefixExt }}{{ .Values.service.geoNodePort6 }}
  - name: {{ .Values.service.portName }}-2-port-{{ .Values.service.internalPort }}
    port: {{ .Values.service.clusterPort3 }}
    targetPort: {{ .Values.service.internalPort }}
    nodePort: {{ .Values.global.nodePortPrefixExt | default .Values.nodePortPrefixExt }}{{ .Values.service.geoNodePort3 }}
  type: NodePort
  selector:
    statefulset.kubernetes.io/pod-name: {{ include "common.fullname" . }}-2
{{ end }}
