
# 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: playground-python
  labels:
    app: backend-python
    type: backend
spec:
  template:
    metadata:
     name: playground
     labels:
       app: backend-python
       type: backend
    spec:
     containers:
     - name: playground-backend-python
       image: "{{ .Values.registry}}/{{ .Values.image.python_image }}:{{ .Values.tag }}"
       imagePullPolicy: {{ .Values.image.pullPolicy }}
       env:
        - name: CACHE_TYPE
          value: "remote"
        - name: CACHE_ADDRESS
          value: {{ .Values.redis_ip }}
        - name: NUM_PARALLEL_JOBS
          value: "20"
        - name: DATASTORE_NAMESPACE
          value: {{ .Values.datastore_name }}
       livenessProbe:
         httpGet:
           path: /liveness
           port: {{ .Values.healthcheck.port }}
         initialDelaySeconds: {{ .Values.healthcheck.livInitialDelaySeconds }}
         periodSeconds: {{ .Values.healthcheck.livPeriodSeconds }}
       readinessProbe:
         httpGet:
           path: /readiness
           port: {{ .Values.healthcheck.port }}
         initialDelaySeconds: {{ .Values.healthcheck.readInitialDelaySeconds }}
         periodSeconds: {{ .Values.healthcheck.readPeriodSeconds }}
       resources:
         requests:
           memory: "1000Mi"
           cpu: "1000m"
         limits:
           cpu: "4000m"
           memory: "16000Mi"
  replicas: {{ .Values.replicaCount  }}
  selector:
    matchLabels:
     app: backend-python