---
# Copyright 2017-present Open Networking Foundation
#
# 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.
{{- $log_level := tpl .Values.log_level . }}

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ template "bbsim.fullname" . }}
  namespace: {{ .Release.Namespace }}
  labels:
    app: "bbsim"
    name: {{ template "bbsim.name" . }}
    chart: {{ template "bbsim.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: "bbsim"
      name: {{ template "bbsim.name" . }}
      release: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app: "bbsim"
        name: {{ template "bbsim.name" . }}
        release: {{ .Release.Name }}
        app.kubernetes.io/name: "bbsim"
        app.kubernetes.io/version: {{ quote .Chart.AppVersion }}
        app.kubernetes.io/component: "device-emulator"
        app.kubernetes.io/part-of: "voltha"
        app.kubernetes.io/managed-by: {{ quote .Release.Service }}
        helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
    spec:
      serviceAccount: {{ .Values.serviceAccountName }}
      serviceAccountName: {{ .Values.serviceAccountName }}
      containers:
        - name: {{ .Chart.Name }}
          image: '{{ tpl .Values.images.bbsim.registry . }}{{ tpl .Values.images.bbsim.repository . }}:{{ tpl ( tpl .Values.images.bbsim.tag . ) . }}'
          imagePullPolicy: {{ tpl .Values.images.bbsim.pullPolicy . }}
          securityContext:
            privileged: true
          command: [
            "/app/bbsim",
            "-openolt_address", ":{{ .Values.olt_tcp_port }}",
            "-olt_id", "{{ .Values.olt_id }}",
            "-nni", "{{ .Values.nni }}",
            "-pon", "{{ .Values.pon }}",
            "-onu", "{{ .Values.onu }}",
            "-oltRebootDelay", "{{ .Values.oltRebootDelay }}",
            "-logLevel", "{{ $log_level }}",
            "-delay", "{{ .Values.delay }}",
            "-services", "configs/services.yaml",
            "-rest_api_address", ":{{ .Values.bbsim_rest_port }}",
            "-ca", "{{ .Values.controlledActivation }}",
            {{ if .Values.enableEvents -}}
            "-enableEvents",
            "-kafkaAddress", "{{ .Values.kafkaAddress }}",
            {{ end -}}
            {{ if .Values.enablePerf -}}
            "-enableperf",
            {{ end -}}
            "-kafkaEventTopic", "{{ .Values.kafkaEventTopic }}",
            {{ if .Values.authRetry -}}
            "-authRetry",
            {{ end -}}
            {{ if .Values.dhcpRetry -}}
            "-dhcpRetry",
            {{ end -}}
          ]
          ports:
            - name: "bbsim-{{ .Values.olt_id }}"
              containerPort: {{ .Values.olt_tcp_port }}
              protocol: TCP
            - name: "bbsim-{{ .Values.olt_id }}-api"
              containerPort: {{ .Values.bbsim_api_port }}
              protocol: TCP
            - name: "bbsim-{{ .Values.olt_id }}-sadis"
              containerPort: {{ .Values.bbsim_sadis_port }}
              protocol: TCP
            - name: "bbsim-{{ .Values.olt_id }}-rest"
              containerPort: {{ .Values.bbsim_rest_port }}
              protocol: TCP
            - name: "bbsim-{{ .Values.olt_id }}-dmi"
              containerPort: {{ .Values.bbsim_dmi_port }}
              protocol: TCP
          env:
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          resources:
{{ toYaml .Values.resources | indent 12 }}
          volumeMounts:
            - name: bbsim-services-config
              mountPath: /app/configs/services.yaml
              subPath: services.yaml
      volumes:
        - name: bbsim-services-config
          configMap:
            name: bbsim-services-{{ .Values.olt_id }}
            items:
              - key: bbsimServicesConfig
                path: services.yaml
    {{- with .Values.nodeSelector }}
      nodeSelector:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.affinity }}
      affinity:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.tolerations }}
      tolerations:
{{ toYaml . | indent 8 }}
    {{- end }}
