---
# Copyright 2018-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.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ template "onos.fullname" . }}
  namespace: {{ .Values.namespace }}
  labels:
    app: {{ template "onos.name" . }}
    chart: {{ template "onos.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
{{- if .Values.xos_service_label }}
    xos_service: {{ .Values.xos_service_label }}
{{- end }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ template "onos.name" . }}
      release: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app: {{ template "onos.name" . }}
        release: {{ .Release.Name }}
{{- if .Values.xos_service_label }}
        xos_service: {{ .Values.xos_service_label }}
{{- end }}
    spec:
      serviceAccount: {{ .Values.serviceAccountName }}
      serviceAccountName: {{ .Values.serviceAccountName }}
      containers:
        - name: {{ .Chart.Name }}
          image:  "{{ .Values.global.registry }}{{ .Values.images.onos.repository }}:{{ tpl .Values.images.onos.tag . }}"
          imagePullPolicy: {{ .Values.images.onos.pullPolicy }}
          command: ["./root/files/onos-1.7.0.cemturker/bin/onos-service", "server", "debug"]
          env:
{{ toYaml .Values.onos_env | indent 12 }}
          ports:
            - name: ovsdb
              containerPort: {{ .Values.services.ovsdb.port }}
            - name: openflow
              containerPort: {{ .Values.services.openflow.port }}
            - name: ssh
              containerPort: {{ .Values.services.ssh.port }}
            - name: ui
              containerPort: {{ .Values.services.ui.port }}
            - name: cluster
              containerPort: {{ .Values.services.cluster.port }}
            - name: debugger
              containerPort: {{ .Values.services.debugger.port }}
            - name: port22
              containerPort: {{ .Values.services.port22.port }}
            - name: port9876
              containerPort: {{ .Values.services.port9876.port }}
            - name: port4010
              containerPort: {{ .Values.services.port4010.port }}
          resources:
{{ toYaml .Values.resources | indent 12 }}
          volumeMounts:
            - name: node-key
              mountPath: /root/vtn
              readOnly: true
            - name: onos-logs-cfg
              mountPath: /root/onos/apache-karaf-3.0.8/etc/org.ops4j.pax.logging.cfg
              subPath: org.ops4j.pax.logging.cfg
            - name: onos-logs
              mountPath: /root/onos/apache-karaf-3.0.8/data/log
{{- if .Values.log_agent.enabled }}
        - name: {{ .Chart.Name }}-log-agent
          image: "{{ .Values.global.registry }}{{ .Values.images.log_agent.repository }}:{{ .Values.images.log_agent.tag }}"
          imagePullPolicy: {{ .Values.images.log_agent.pullPolicy }}
          args: [ "-c", "/conf/filebeat.yml", "-e" ]
          env:
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: NODE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
          volumeMounts:
            - name: onos-logs
              mountPath: /onos_logs
            - name: progran-log-agent-configmap-volume
              mountPath: /conf
{{- end }}
      volumes:
        - name: node-key
          secret:
            secretName: node-key
            defaultMode: 256
            optional: true
        - name: onos-logs-cfg
          configMap:
            name: onos-progran
            items:
              - key: logCfg
                path: org.ops4j.pax.logging.cfg
        - name: onos-logs
          emptyDir: {}
{{- if .Values.log_agent.enabled }}
        - name: progran-log-agent-configmap-volume
          configMap:
            name: progran-log-agent-configmap
            items:
              - key: config
                path: filebeat.yml
{{- end }}
{{- with .Values.nodeSelector }}
      nodeSelector:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.affinity }}
      affinity:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.tolerations }}
      tolerations:
{{ toYaml . | indent 8 }}
    {{- end }}
{{- if .Values.log_agent.enabled }}
{{- include "onos.progran-log-agent-configmap" . }}
{{- end }}

