# Copyright 2022-2023 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: "internal-kafka-headless.{{ .Values.global.voltha_infra_namespace }}.svc.cluster.local"
        - 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"
