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

{{- $root := . -}}
{{- $tag := tpl ( tpl .Values.images.rw_core.tag . ) . }}
{{- $repository := tpl .Values.images.rw_core.repository . }}
{{- $registry := tpl .Values.images.rw_core.registry . }}
{{- $pullpolicy := tpl .Values.images.rw_core.pullPolicy . }}
{{- $core_timeout := tpl $root.Values.rw_core.core_timeout . }}
{{- $long_request_timeout := tpl $root.Values.rw_core.timeout_long_request . }}
{{- $request_timeout := tpl $root.Values.rw_core.timeout_request . }}
{{- $set_log_level := tpl .Values.rw_core.log_level . | upper }}
{{- $log_level := 3 }}
{{- if eq $set_log_level "DEBUG" }}
{{- $log_level = 0 }}
{{- else if eq $set_log_level "INFO" }}
{{- $log_level = 1 }}
{{- else if eq $set_log_level "WARN" }}
{{- $log_level = 2 }}
{{- else if eq $set_log_level "ERROR" }}
{{- $log_level = 3 }}
{{- else if eq $set_log_level "PANIC" }}
{{- $log_level = 4 }}
{{- else if eq $set_log_level "FATAL" }}
{{- $log_level = 5 }}
{{- else }}
{{- $log_level = 3 }}
{{- end }}
{{- range $i, $e := until (int .Values.replicas.rw_core) }}
{{- $cluster := add1 $i }}
{{- range $i, $e := until 2 }}
{{- $cluster_core_id := add1 $i }}
---
apiVersion: v1
kind: Service
metadata:
  name: voltha-rw-core-{{ $cluster }}{{ $cluster_core_id }}
  serviceAccountName: {{ $root.Values.serviceaccount }}
spec:
  serviceAccountName: {{ $root.Values.serviceaccount }}
  clusterIP: None
  ports:
    - name: grpc
      port: 50057
      targetPort: 50057
  selector:
    app: rw-core
    affinity-group: {{ quote $cluster }}
    affinity-group-core-id: {{ quote $cluster_core_id }}

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: voltha-rw-core-{{ $cluster }}{{ $cluster_core_id }}
  serviceAccountName: {{ $root.Values.serviceaccount }}
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rw-core
      affinity-group: {{ quote $cluster }}
      affinity-group-core-id: {{ quote $cluster_core_id }}
  template:
    metadata:
      labels:
        app: rw-core
        affinity-group: {{ quote $cluster }}
        affinity-group-core-id: {{ quote $cluster_core_id }}
        app.kubernetes.io/name: "read-write-core"
        app.kubernetes.io/version: {{ quote $root.Chart.AppVersion }}
        app.kubernetes.io/component: "core"
        app.kubernetes.io/part-of: "voltha"
        app.kubernetes.io/managed-by: {{ quote $root.Release.Service }}
        helm.sh/chart: "{{ $root.Chart.Name }}-{{ $root.Chart.Version }}"
      annotations:
        cni: "calico"
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - topologyKey: "kubernetes.io/hostname"
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                    - rw-core
                - key: affinity-group
                  operator: In
                  values:
                    - {{ quote $cluster }}
      serviceAccountName: {{ $root.Values.serviceaccount }}
      containers:
        - name: voltha
          image: {{ $registry }}{{ $repository }}:{{ $tag }}
          imagePullPolicy: {{ $pullpolicy }}
          env:
            - name: NAMESPACE
              value: {{ quote $root.Release.Namespace }}
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
          args:
            - "/app/rw_core"
            - "-kv_store_type=etcd"
            - "-kv_store_host={{ $root.Values.services.etcd.service }}"
            - "-kv_store_port={{ $root.Values.services.etcd.port }}"
            - "-grpc_host=$(POD_IP)"
            - "-grpc_port=50057"
            - "-banner=true"
            - "-kafka_adapter_host={{ $root.Values.services.kafka.adapter.service }}"
            - "-kafka_adapter_port={{ $root.Values.services.kafka.adapter.port }}"
            - "-kafka_cluster_host={{ $root.Values.services.kafka.cluster.port }}"
            - "-kafka_cluster_port={{ $root.Values.services.kafka.cluster.port }}"
            - "-rw_core_topic=rwcore"
            - "-kv_store_data_prefix=service/voltha"
            - "-in_competing_mode=true"
            - "-core_timeout={{ $core_timeout }}"
            - "-timeout_long_request={{ $long_request_timeout }}"
            - "-timeout_request={{ $request_timeout }}"
            - "-log_level={{ $log_level }}"
          ports:
            - containerPort: 50057
              name: grpc-port
{{end}}
{{end}}
