---
# 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/v1beta2
kind: Deployment
metadata:
  name: {{ template "onos.fullname" . }}
  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: ["./bin/onos-service", "server", "debug"]
          env:
{{ toYaml .Values.onos_env | indent 12 }}
          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: 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: {{ template "onos.fullname" . }}-onos
            items:
              - key: logCfg
                path: org.ops4j.pax.logging.cfg
        - name: onos-logs
          emptyDir: {}
{{- if .Values.log_agent.enabled }}
        - name: log-agent-configmap-volume
          configMap:
            name: {{ template "onos.fullname" . }}-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.log-agent-configmap" . }}
{{- end }}
