---
# 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: extensions/v1beta1
kind: Deployment
metadata:
  name: {{ template "bbsim.fullname" . }}
  namespace: {{ .Release.Namespace }}
  labels:
    app: {{ template "bbsim.name" . }}
    chart: {{ template "bbsim.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ template "bbsim.name" . }}
      release: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app: "bbsim"
        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",
            "-olt_id", "{{ .Values.olt_id }}",
            "-nni", "{{ .Values.nni }}",
            "-pon", "{{ .Values.pon }}",
            "-onu", "{{ .Values.onu }}",
            "-logLevel", "{{ $log_level }}",
            {{ if .Values.auth -}}
            "-auth",
            {{ end -}}
            {{ if .Values.dhcp -}}
            "-dhcp",
            {{ end -}}
            {{ if .Values.igmp -}}
            "-igmp",
            {{ end -}}
            "-c_tag", "{{ .Values.c_tag }}",
            "-c_tag_allocation", "{{ .Values.c_tag_allocation }}",
            "-s_tag", "{{ .Values.s_tag }}",
            "-s_tag_allocation", "{{ .Values.s_tag_allocation }}",
            "-delay", "{{ .Values.delay }}",
            {{ if .Values.enableEvents -}}
            "-enableEvents",
            "-kafkaAddress", "{{ .Values.kafkaAddress }}",
            {{ end -}}
            {{ if .Values.enablePerf -}}
            "-enableperf",
            {{ end -}}
            "-sadisFormat", "{{ .Values.sadisFormat }}",
          ]
          ports:
            - name: "bbsim-{{ .Values.olt_id }}"
              containerPort: {{ .Values.olt_tcp_port }}
              port: {{ .Values.olt_tcp_port }}
              protocol: TCP
            - name: "bbsim-{{ .Values.olt_id }}-api"
              containerPort: {{ .Values.bbsim_api_port }}
              port: {{ .Values.bbsim_api_port }}
              protocol: TCP
            - name: "bbsim-{{ .Values.olt_id }}-sadis"
              containerPort: {{ .Values.bbsim_sadis_port }}
              port: {{ .Values.bbsim_sadis_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 }}
    {{- with .Values.nodeSelector }}
      nodeSelector:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.affinity }}
      affinity:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.tolerations }}
      tolerations:
{{ toYaml . | indent 8 }}
    {{- end }}
