#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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 eq .Values.whisk.ingress.type "Standard" }}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ .Release.Name }}-ingress
  labels:
{{ include "openwhisk.label_boilerplate" . | indent 4 }}
  annotations:
    {{- range $key, $value := .Values.whisk.ingress.annotations }}
      {{ $key }}: {{ $value | quote }}
    {{- end }}
spec:
  {{- if .Values.whisk.ingress.tls.enabled }}
  tls:
  - hosts:
    - {{ .Values.whisk.ingress.domain }}
    {{- if .Values.whisk.ingress.tls.secretenabled }}
    secretName: {{ .Values.whisk.ingress.tls.secretname | quote }}
    {{- end }}
  {{- end }}
  rules:
  - host: {{ .Values.whisk.ingress.domain }}
    http:
      paths:
      - path: /api/v1/web
        backend:
          serviceName: {{ .Release.Name }}-controller
          servicePort: http
      - path: /api/v1
        backend:
          serviceName: {{ .Release.Name }}-controller
          servicePort: http
      # API GW generated API invocation
      - path: /api
        backend:
          serviceName: {{ .Release.Name }}-apigateway
          servicePort: mgmt
      # API GW health status
      - path: /v1/health-check
        backend:
          serviceName: {{ .Release.Name }}-apigateway
          servicePort: api
      # API management REST APIs
      - path: /v2
        backend:
          serviceName: {{ .Release.Name }}-apigateway
          servicePort: api
      - path: /
        backend:
          serviceName: {{ .Release.Name }}-nginx
          servicePort: http
{{- end }}
