# 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.

#{{ if not .Values.disableAaiHbase }}
apiVersion: v1
kind: Service
metadata:
  name: hbase
  namespace: "{{ .Values.nsPrefix }}"
  labels:
    app: hbase
spec:
  ports:
  - name: "hbase-port-1"
    port: 2181
  - name: "hbase-port-2"
    port: 8080
  - name: "hbase-port-3"
    port: 8085
  - name: "hbase-port-4"
    port: 9090
  - name: "hbase-port-5"
    port: 16000
  - name: "hbase-port-6"
    port: 16010
  - name: "hbase-port-7"
    port: 16201
  selector:
    app: hbase
  clusterIP: None
#{{ end }}
#{{ if not .Values.disableAaiAaiService }}
---
apiVersion: v1
kind: Service
metadata:
  name: aai-service
  namespace: "{{ .Values.nsPrefix }}"
  labels:
    app: aai-service
spec:
  ports:
  - name: "aai-service-port-8443"
    port: 8443
    targetPort: 8443
    nodePort: {{ .Values.nodePortPrefix }}33
  - name: "aai-service-port-8080"
    port: 8080
    targetPort: 8080
    nodePort: {{ .Values.nodePortPrefix }}32
  type: NodePort
  selector:
    app: aai-service
  clusterIP: {{ .Values.aaiServiceClusterIp }}
#{{ end }}
#{{ if not .Values.disableAaiModelLoaderService }}
---
apiVersion: v1
kind: Service
metadata:
  name: model-loader-service
  namespace: "{{ .Values.nsPrefix }}"
  labels:
    app: model-loader-service
spec:
  ports:
  - name: "model-loader-service-port-8443"
    port: 8443
    nodePort: {{ .Values.nodePortPrefix }}29
  - name: "model-loader-service-port-8080"
    port: 8080
    nodePort: {{ .Values.nodePortPrefix }}10
  type: NodePort
  selector:
    app: model-loader-service
#{{ end }}
---
apiVersion: v1
kind: Service
metadata:
  name: gremlin
  namespace: "{{ .Values.nsPrefix }}"
  labels:
    app: gremlin
spec:
  ports:
  - name: "gremlin-port"
    port: 8182
  selector:
    app: gremlin
  clusterIP: None
#{{ if not .Values.disableAaiElasticsearch }}
---
apiVersion: v1
kind: Service
metadata:
  name: aai-elasticsearch
  namespace: "{{ .Values.nsPrefix }}"
  labels:
    app: aai-elasticsearch
spec:
  ports:
  - name: "aai-elasticsearch-port"
    port: 9200
  selector:
    app: aai-elasticsearch
  clusterIP: None
#{{ end }}
#{{ if not .Values.disableAaiSearchDataService }}
---
apiVersion: v1
kind: Service
metadata:
  name: search-data-service
  namespace: "{{ .Values.nsPrefix }}"
  labels:
    app: search-data-service
spec:
  ports:
  - name: "search-data-service-port-9509"
    port: 9509
  selector:
    app: search-data-service
  clusterIP: None
#{{ end }}
#{{ if not .Values.disableAaiAaiTraversal }}
---
apiVersion: v1
kind: Service
metadata:
  name: aai-traversal
  namespace: "{{ .Values.nsPrefix }}"
  labels:
    app: aai-traversal
spec:
  ports:
  - name: "aai-traversal-port-8446"
    port: 8446
  - name: aai-traversal-port-debug
    port: 5005
  selector:
    app: aai-traversal
  clusterIP: None
#{{ end }}
#{{ if not .Values.disableAaiAaiResources }}
---
apiVersion: v1
kind: Service
metadata:
  name: aai-resources
  namespace: "{{ .Values.nsPrefix }}"
  labels:
    app: aai-resources
spec:
  ports:
  - name: "aai-resources-port-8447"
    port: 8447
  - name: aai-resources-port-debug
    port: 5005
  selector:
    app: aai-resources
  clusterIP: None
#{{ end }}
#{{ if not .Values.disableAaiSparkyBe }}
---
apiVersion: v1
kind: Service
metadata:
  name: sparky-be
  namespace: "{{ .Values.nsPrefix }}"
  labels:
    app: sparky-be
spec:
  ports:
  - name: "sparky-be-port-9517"
    port: 9517
  selector:
    app: sparky-be
  clusterIP: None
#{{ end }}
