# Copyright © 2017 Amdocs, Bell Canada
#
# 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/v1beta1
kind: StatefulSet
metadata:
  name: {{ include "common.fullname" . }}
  namespace: {{ include "common.namespace" . }}
  labels:
    app: {{ include "common.name" . }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  serviceName: {{ include "common.servicename" . }}-cluster
  replicas: {{ .Values.replicaCount }}
  podManagementPolicy: Parallel
  template:
    metadata:
      labels:
        app: {{ include "common.name" . }}
        release: {{ .Release.Name }}
    spec:
      initContainers:
      - command:
        - /root/ready.py
        args:
        - --container-name
        - {{ .Values.mysql.nameOverride }}
        env:
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        image: "{{ .Values.global.readinessRepository }}/{{ .Values.global.readinessImage }}"
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        name: {{ include "common.name" . }}-readiness
      containers:
        - name: {{ include "common.name" . }}
          image: "{{ include "common.repository" . }}/{{ .Values.image }}"
          imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
          command: ["/bin/bash"]
          args: ["-c", "/opt/sdnc/bin/startODL.sh"]
          ports:
          - containerPort: {{ .Values.service.internalPort }}
          - containerPort: {{ .Values.service.internalPort2 }}
          - containerPort: {{ .Values.service.internalPort3 }}
          - containerPort: {{ .Values.service.clusterPort }}
          readinessProbe:
            tcpSocket:
              port: {{ .Values.service.internalPort }}
            initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
            periodSeconds: {{ .Values.readiness.periodSeconds }}
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: {{ template "common.fullname" . }}
                  key: db-root-password
            - name: ODL_ADMIN_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: {{ template "common.fullname" . }}-odl
                  key: odl-password
            - name: SDNC_CONFIG_DIR
              value: "{{ .Values.config.configDir }}"
            - name: ENABLE_ODL_CLUSTER
              value: "{{ .Values.config.enableClustering }}"
            - name: MY_ODL_CLUSTER
              value: "{{ .Values.config.myODLCluster }}"
            - name: PEER_ODL_CLUSTER
              value: "{{ .Values.config.peerODLCluster }}"
            - name: IS_PRIMARY_CLUSTER
              value: "{{ .Values.config.isPrimaryCluster }}"
            - name: GEO_ENABLED
              value: "{{ .Values.config.geoEnabled}}"
            - name: SDNC_REPLICAS
              value: "{{ .Values.replicaCount }}"
            - name: MYSQL_HOST
              value: "{{.Release.Name}}-{{.Values.mysql.nameOverride}}-0.{{.Values.mysql.service.name}}.{{.Release.Namespace}}"
          volumeMounts:
          - mountPath: /etc/localtime
            name: localtime
            readOnly: true
          - mountPath: /opt/opendaylight/current/etc/org.ops4j.pax.logging.cfg
            name: sdnc-logging-cfg-config
            subPath: org.ops4j.pax.logging.cfg
          - mountPath: {{ .Values.config.binDir }}/startODL.sh
            name: bin
            subPath: startODL.sh
          - mountPath: {{ .Values.config.binDir }}/installSdncDb.sh
            name: bin
            subPath: installSdncDb.sh
          - mountPath: {{ .Values.config.configDir }}/aaiclient.properties
            name: properties
            subPath: aaiclient.properties
          - mountPath: {{ .Values.config.configDir }}/dblib.properties
            name: properties
            subPath: dblib.properties
          - mountPath: {{ .Values.config.configDir }}/lcm-dg.properties
            name: properties
            subPath: lcm-dg.properties
          - mountPath: {{ .Values.config.configDir }}/svclogic.properties
            name: properties
            subPath: svclogic.properties
          - mountPath: /opt/onap/sdnc/svclogic/config/svclogic.properties
            name: properties
            subPath: svclogic.properties
          - mountPath: {{ .Values.persistence.mdsalPath }}
            name: {{ include "common.fullname" . }}-mdsal
          - mountPath: /var/log/onap
            name: logs
          resources:
{{ toYaml .Values.resources | indent 12 }}
        {{- if .Values.nodeSelector }}
        nodeSelector:
{{ toYaml .Values.nodeSelector | indent 10 }}
        {{- end -}}
        {{- if .Values.affinity }}
        affinity:
{{ toYaml .Values.affinity | indent 10 }}
        {{- end }}

        # side car containers
        - name: filebeat-onap
          image: "{{ .Values.global.loggingRepository }}/{{ .Values.global.loggingImage }}"
          imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
          volumeMounts:
          - mountPath: /usr/share/filebeat/filebeat.yml
            name: filebeat-conf
            subPath: filebeat.yml
          - mountPath: /var/log/onap
            name: logs
          - mountPath: /usr/share/filebeat/data
            name: data-filebeat
      imagePullSecrets:
      - name: "{{ include "common.namespace" . }}-docker-registry-key"
      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
        - name: logs
          emptyDir: {}
        - name: data-filebeat
          emptyDir: {}
        - name: filebeat-conf
          configMap:
            name: {{ include "common.fullname" . }}-filebeat-configmap
        - name: sdnc-logging-cfg-config
          configMap:
            name: {{ include "common.fullname" . }}-log-configmap
        - name: bin
          configMap:
            name: {{ include "common.fullname" . }}-bin
            defaultMode: 0755
        - name: properties
          configMap:
            name: {{ include "common.fullname" . }}-properties
            defaultMode: 0644
  {{ if not .Values.persistence.enabled }}
        - name: {{ include "common.fullname" . }}-mdsal
          emptyDir: {}
  {{ else }}
  volumeClaimTemplates:
  - metadata:
      name: {{ include "common.fullname" . }}-mdsal
      labels:
        name: {{ include "common.fullname" . }}
    spec:
      accessModes: [ {{ .Values.persistence.accessMode }} ]
      storageClassName: {{ include "common.fullname" . }}-mdsal
      resources:
        requests:
          storage: {{ .Values.persistence.size }}
  {{ end }}
