# 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:
      - 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: "redis"
        - name: KV_STORE_HOST
          value: "voltha-infra-redis-headless.{{ .Values.global.voltha_infra_namespace }}.svc.cluster.local"
        - name: KV_STORE_PORT
          value: "6379"
        - 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
        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 . }}
        name: voltha-go-controller
        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 }}"
      restartPolicy: "Always"
