{{- if eq .Values.expose.type "ingress" }}
{{- $ingress := .Values.expose.ingress -}}
{{- $tls := .Values.expose.tls -}}
{{- if eq .Values.expose.ingress.controller "gce" }}
  {{- $_ := set . "portal_path" "/*" -}}
  {{- $_ := set . "api_path" "/api/*" -}}
  {{- $_ := set . "service_path" "/service/*" -}}
  {{- $_ := set . "v2_path" "/v2/*" -}}
  {{- $_ := set . "chartrepo_path" "/chartrepo/*" -}}
  {{- $_ := set . "controller_path" "/c/*" -}}
{{- else if eq .Values.expose.ingress.controller "ncp" }}
  {{- $_ := set . "portal_path" "/.*" -}}
  {{- $_ := set . "api_path" "/api/.*" -}}
  {{- $_ := set . "service_path" "/service/.*" -}}
  {{- $_ := set . "v2_path" "/v2/.*" -}}
  {{- $_ := set . "chartrepo_path" "/chartrepo/.*" -}}
  {{- $_ := set . "controller_path" "/c/.*" -}}
{{- else }}
  {{- $_ := set . "portal_path" "/" -}}
  {{- $_ := set . "api_path" "/api/" -}}
  {{- $_ := set . "service_path" "/service/" -}}
  {{- $_ := set . "v2_path" "/v2/" -}}
  {{- $_ := set . "chartrepo_path" "/chartrepo/" -}}
  {{- $_ := set . "controller_path" "/c/" -}}
{{- end }}

---
{{- if semverCompare "<1.14-0" (include "harbor.ingress.kubeVersion" .) }}
apiVersion: extensions/v1beta1
{{- else if semverCompare "<1.19-0" (include "harbor.ingress.kubeVersion" .) }}
apiVersion: networking.k8s.io/v1beta1
{{- else }}
apiVersion: networking.k8s.io/v1
{{- end }}
kind: Ingress
metadata:
  name: "{{ template "harbor.ingress" . }}"
  labels:
{{ include "harbor.labels" . | indent 4 }}
{{- if $ingress.harbor.labels }}
{{ toYaml $ingress.harbor.labels | indent 4 }}
{{- end }}
  annotations:
{{ toYaml $ingress.annotations | indent 4 }}
{{- if .Values.internalTLS.enabled }}
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
{{- end }}
{{- if eq .Values.expose.ingress.controller "ncp" }}
    ncp/use-regex: "true"
    {{- if $tls.enabled }}
    ncp/http-redirect: "true"
    {{- end }}
{{- end }}
{{- if $ingress.harbor.annotations }}
{{ toYaml $ingress.harbor.annotations | indent 4 }}
{{- end }}
spec:
  {{- if $ingress.className }}
  ingressClassName: {{ $ingress.className }}
  {{- end }}
  {{- if $tls.enabled }}
  tls:
  - secretName: {{ template "harbor.tlsCoreSecretForIngress" . }}
    {{- if $ingress.hosts.core }}
    hosts:
    - {{ $ingress.hosts.core }}
    {{- end }}
  {{- end }}
  rules:
  - http:
      paths:
{{- if semverCompare "<1.19-0" (include "harbor.ingress.kubeVersion" .) }}
      - path: {{ .api_path }}
        backend:
          serviceName: {{ template "harbor.core" . }}
          servicePort: {{ template "harbor.core.servicePort" . }}
      - path: {{ .service_path }}
        backend:
          serviceName: {{ template "harbor.core" . }}
          servicePort: {{ template "harbor.core.servicePort" . }}
      - path: {{ .v2_path }}
        backend:
          serviceName: {{ template "harbor.core" . }}
          servicePort: {{ template "harbor.core.servicePort" . }}
      - path: {{ .chartrepo_path }}
        backend:
          serviceName: {{ template "harbor.core" . }}
          servicePort: {{ template "harbor.core.servicePort" . }}
      - path: {{ .controller_path }}
        backend:
          serviceName: {{ template "harbor.core" . }}
          servicePort: {{ template "harbor.core.servicePort" . }}
      - path: {{ .portal_path }}
        backend:
          serviceName: {{ template "harbor.portal" . }}
          servicePort: {{ template "harbor.portal.servicePort" . }}
{{- else }}
      - path: {{ .api_path }}
        pathType: Prefix
        backend:
          service:
            name: {{ template "harbor.core" . }}
            port:
              number: {{ template "harbor.core.servicePort" . }}
      - path: {{ .service_path }}
        pathType: Prefix
        backend:
          service:
            name: {{ template "harbor.core" . }}
            port:
              number: {{ template "harbor.core.servicePort" . }}
      - path: {{ .v2_path }}
        pathType: Prefix
        backend:
          service:
            name: {{ template "harbor.core" . }}
            port:
              number: {{ template "harbor.core.servicePort" . }}
      - path: {{ .chartrepo_path }}
        pathType: Prefix
        backend:
          service:
            name: {{ template "harbor.core" . }}
            port:
              number: {{ template "harbor.core.servicePort" . }}
      - path: {{ .controller_path }}
        pathType: Prefix
        backend:
          service:
            name: {{ template "harbor.core" . }}
            port:
              number: {{ template "harbor.core.servicePort" . }}
      - path: {{ .portal_path }}
        pathType: Prefix
        backend:
          service:
            name: {{ template "harbor.portal" . }}
            port:
              number: {{ template "harbor.portal.servicePort" . }}
{{- end }}
    {{- if $ingress.hosts.core }}
    host: {{ $ingress.hosts.core }}
    {{- end }}

{{- end }}
