---
# 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: "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",
            "-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 }}",
            "-kafkaEventTopic", "{{ .Values.kafkaEventTopic }}"
          ]
          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 }}
