# Copyright 2022-2024 Open Networking Foundation (ONF) and the ONF Contributors
#
# 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.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: "{{ .Chart.Name }}"
  labels:
    release: {{ .Release.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: "{{ .Chart.Name }}"
  template:
    metadata:
      labels:
        app: "{{ .Chart.Name }}"
    spec:
      containers:
      - args:
          - "/app/voltha-go-controller"
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: VOLTHA_HOST
          value: "$(NAMESPACE)-voltha-api.$(NAMESPACE).svc.cluster.local"
        - name: VOLTHA_PORT
          value: "55555"
        - name: KV_STORE_TYPE
          value: "{{ .Values.services.kvstore.type }}"
        - name: KV_STORE_HOST
          value: "{{ .Values.services.kvstore.address }}"
        - name: KV_STORE_PORT
          value: "{{ .Values.services.kvstore.port }}"
        - name: KAFKA_ADAPTER_HOST
          value: "{{ tpl .Values.services.kafka.cluster.address . }}"
        - name: KAFKA_ADAPTER_PORT
          value: "9092"
        - name: LOG_LEVEL
          value: .Values.global.log_level
        - name: KV_STORE_TIMEOUT
          value: "3000000000"
        - name: DEVICE_SYNC_DURATION
          value: "10"
        - name: MAX_FLOW_RETRY_DURATION
          value: "60"
        - name: LIVE_PROBE_INTERVAL
          value: "60"
        - name: NOT_LIVE_PROBE_INTERVAL
          value: "5"
        name: voltha-go-controller
        image: '{{ tpl .Values.images.voltha_go_controller.registry . }}{{ tpl .Values.images.voltha_go_controller.repository . }}:{{ tpl ( tpl .Values.images.voltha_go_controller.tag . ) . }}'
        imagePullPolicy: {{ tpl .Values.images.voltha_go_controller.pullPolicy . }}
        securityContext:
          runAsUser: {{ .Values.securityContext.runAsUser }}
          runAsGroup: {{ .Values.securityContext.runAsGroup }}
          fsGroup: {{ .Values.securityContext.fsGroup }}
        ports:
        - containerPort: {{ .Values.voltha_go_controller.sshPort }}
          name: ssh-port
        - containerPort: {{ .Values.voltha_go_controller.uiPort }}
          name: ui-port
          protocol: "{{ .Values.voltha_go_controller.uiProtocol }}"
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8090
          initialDelaySeconds: {{ .Values.probe.liveness.initial_delay_seconds }}
          periodSeconds: {{ .Values.probe.liveness.period_seconds }}
        readinessProbe:
          httpGet:
            path: /readz
            port: 8090
          initialDelaySeconds: {{ .Values.probe.readiness.initial_delay_seconds }}
          periodSeconds: {{ .Values.probe.readiness.period_seconds }}
        resources:
          requests:
            {{- if .Values.resources.requests.memory }}
            memory: {{ .Values.resources.requests.memory }}
            {{- end }}
            {{- if .Values.resources.requests.cpu }}
            cpu: {{ .Values.resources.requests.cpu }}
            {{- end }}
          limits:
            {{- if .Values.resources.limits.memory }}
            memory: {{ .Values.resources.limits.memory }}
            {{- end }}
            {{- if .Values.resources.limits.cpu }}
            cpu: {{ .Values.resources.limits.cpu }}
            {{- end }}
      restartPolicy: "Always"
