# Copyright © 2018  AT&T Intellectual Property.  All rights reserved.
#
# 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.

#{{ if not .Values.disableBuscontroller }}
apiVersion: v1
kind: Service
metadata:
  name: {{ include "common.name" . }}-{{ .Values.buscontroller.service }}
  namespace: {{ .Values.global.nsPrefix }}
  labels:
    app: {{ .Values.buscontroller.service }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
  annotations:
# Example MSB registration annotation
#    msb.onap.org/service-info: '[
#      {
#          "serviceName": "so",
#          "version": "v1",
#          "url": "/ecomp/mso/infra",
#          "protocol": "REST"
#          "port": "8080",
#          "visualRange":"1"
#      }
#      ]'
spec:
  type: {{ .Values.buscontroller.type }}
  ports:
    {{if eq .Values.buscontroller.type "NodePort" -}}
    - port: {{ .Values.buscontroller.httpExternalPort }}
      targetPort: {{ .Values.buscontroller.httpExternalPort }}
      nodePort: {{ .Values.global.nodePortPrefix | default .Values.nodePortPrefix }}{{ .Values.buscontroller.httpPort }}
      name: "{{ .Values.buscontroller.name }}-http-port"
#    This will be needed when we get SSL certificates
#    - port: {{ .Values.buscontroller.httpsExternalPort }}
#      targetPort: {{ .Values.buscontroller.httpsExternalPort }}
#      nodePort: {{ .Values.global.nodePortPrefix | default .Values.nodePortPrefix }}{{ .Values.buscontroller.httpsPort }}
#      name: "{{ .Values.buscontroller.name }}-https-port"
    {{- else -}}
    - port: {{ .Values.buscontroller.externalPort }}
      targetPort: {{ .Values.buscontroller.httpPort }}
      name: {{ .Values.buscontroller.name }}
    {{- end}}
  selector:
    app: {{ include "common.name" . }}-{{ .Values.buscontroller.service }}
    release: {{ .Release.Name }}

#{{ end }}
