---
# 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: {{ .Values.privileged }}
          livenessProbe:
            exec:
              command:
              - bbsimctl
              - olt
              - get
            initialDelaySeconds: 5
            periodSeconds: 30
          readinessProbe:
            httpGet:
              path: /v2/cfg
              port: {{ .Values.bbsim_sadis_port }}
              httpHeaders:
            initialDelaySeconds: 5
            periodSeconds: 30
          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 }}",
            "-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
      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 }}
