---
# 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" . }}
  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.onosImage }}
          imagePullPolicy: {{ .Values.imagePullPolicy }}
          command: ["./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 }}
          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: 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: 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 }}
