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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-apigateway
  labels:
    name: {{ .Release.Name }}-apigateway
{{ include "openwhisk.label_boilerplate" . | indent 4 }}
spec:
  replicas: {{ .Values.apigw.replicaCount }}
  selector:
    matchLabels:
      name: {{ .Release.Name }}-apigateway
  template:
    metadata:
      labels:
        name: {{ .Release.Name }}-apigateway
{{ include "openwhisk.label_boilerplate" . | indent 8 }}
    spec:
      restartPolicy: {{ .Values.apigw.restartPolicy }}

      {{- if .Values.affinity.enabled }}
      affinity:
{{ include "openwhisk.affinity.core" . | indent 8 }}
{{ include "openwhisk.affinity.selfAntiAffinity" ( printf "%s-apigateway" .Release.Name ) | indent 8 }}
      {{- end }}

      {{- if .Values.toleration.enabled }}
      tolerations:
{{ include "openwhisk.toleration.core" . | indent 8 }}
      {{- end }}

{{ include "openwhisk.docker.imagePullSecrets" . | indent 6 }}
      containers:
        - name: apigateway
          imagePullPolicy: {{ .Values.apigw.imagePullPolicy | quote }}
          image: "{{- .Values.docker.registry.name -}}{{- .Values.apigw.imageName -}}:{{- .Values.apigw.imageTag -}}"
          ports:
          - name: mgmt
            containerPort: {{ .Values.apigw.mgmtPort }}
          - name: api
            containerPort: {{ .Values.apigw.apiPort }}
          env:
          - name: "REDIS_HOST"
            value: "{{ include "openwhisk.redis_host" . }}"
          - name: "REDIS_PORT"
            value: {{ .Values.redis.port | quote }}
          - name: "PUBLIC_GATEWAY_URL"
            valueFrom:
              configMapKeyRef:
                name: {{ .Release.Name }}-whisk.config
                key: whisk_external_api_host_url
          - name: "BACKEND_HOST"
            valueFrom:
              configMapKeyRef:
                name: {{ .Release.Name }}-whisk.config
                key: whisk_internal_api_host_url
