---
# 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 . | lower }}

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: {{ .Values.privileged }}
          livenessProbe:
            exec:
              command:
              - bbsimctl
              - olt
              - get
            initialDelaySeconds: 5
            periodSeconds: 30
            timeoutSeconds: 5
          readinessProbe:
            httpGet:
              path: /v2/cfg
              port: {{ .Values.bbsim_sadis_port }}
              httpHeaders:
            initialDelaySeconds: 5
            periodSeconds: 30
            timeoutSeconds: 5
          command: [
            "/app/bbsim",
            "-openolt_address", "0.0.0.0:{{ .Values.olt_tcp_port }}",
            "-dmi_server_address", ":{{ .Values.bbsim_dmi_port}}",
            "-olt_id", "{{ .Values.olt_id }}",
            "-nni", "{{ .Values.nni }}",
            "-nni_speed", "{{ .Values.nni_speed }}",
            "-pon", "{{ .Values.pon }}",
            "-onu", "{{ .Values.onu }}",
            "-uni", "{{ .Values.uni }}",
            "-pots", "{{ .Values.pots }}",
            "-bp_format", "{{ .Values.bp_format }}",
            "-oltRebootDelay", "{{ .Values.oltRebootDelay }}",
            "-logLevel", "{{ $log_level }}",
            "-delay", "{{ .Values.delay }}",
            "-services", "configs/services.yaml",
            {{ if .Values.ponPortsConfig -}}
            "-pon_port_config_file", "configs/pon-config.yaml",
            {{ end -}}
            "-rest_api_address", ":{{ .Values.bbsim_rest_port }}",
            "-ca", "{{ .Values.controlledActivation }}",
            "-omci_response_rate", "{{ .Values.omci_response_rate }}",
            {{ 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
            - name: bbsim-pon-ports-config
              mountPath: /app/configs/pon-config.yaml
              subPath: pon-config.yaml
      volumes:
        - name: bbsim-services-config
          configMap:
            name: bbsim-services-{{ .Values.olt_id }}
            items:
              - key: bbsimServicesConfig
                path: services.yaml
        - name: bbsim-pon-ports-config
          configMap:
            name: bbsim-pon-ports-{{ .Values.olt_id }}
            items:
              - key: bbsimPonPortsConfig
                path: pon-config.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 }}
