---
# 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: {{ template "bbsim.name" . }}
        release: {{ .Release.Name }}
    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 -}}
            "-c_tag", "{{ .Values.c_tag }}",
            "-s_tag", "{{ .Values.s_tag }}",
            "-delay", "{{ .Values.delay }}",
            {{ if .Values.enableEvents -}}
            "-enableEvents",
            "-kafkaAddress", "{{ .Values.kafkaAddress }}",
            {{ end -}}
            {{ if .Values.enablePerf -}}
            "-enableperf"
            {{ end -}}
          ]
          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 }}
