# 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 }}"
  namespace: "{{ .Release.Namespace }}"
  labels:
    release: {{ .Release.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: "{{ .Chart.Name }}"
  template:
    metadata:
      labels:
        app: "{{ .Chart.Name }}"
    spec:
      {{- if .Values.securityContext.enabled }}
      securityContext:
        runAsUser: {{ .Values.securityContext.runAsUser }}
        runAsGroup: {{ .Values.securityContext.runAsGroup }}
        fsGroup: {{ .Values.securityContext.fsGroup }}
      {{- end }}
      containers:
      - args:
          - "/app/voltha-go-controller"
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: NAMESPACE
          value: {{ .Release.Namespace }}
        - name: VOLTHA_HOST
          value: "{{ .Release.Namespace }}-voltha-api.{{ .Release.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 . }}
        {{- if .Values.securityContext.enabled }}
        securityContext:
          allowPrivilegeEscalation: false
        {{- end }}
        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"
