---
# 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.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 }}
          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-progran
            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 }}

