{{/*
# Copyright © 2022 Nordix 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: kafka.strimzi.io/v1beta2
kind: Kafka
metadata: {{- include "common.resourceMetadata" . | nindent 2 }}
spec:
  kafka:
    version: {{ .Values.config.kafkaVersion }}
    replicas: {{ .Values.replicaCount }}
    listeners:
      - name: plain
        port: {{ .Values.config.kafkaInternalPort }}
        type: internal
        tls: false
        authentication:
          type: {{ .Values.config.saslMechanism }}
      - name: tls
        port: 9093
        type: internal
        tls: true
        authentication:
          type: tls
      - name: external
        port: 9094
        type: {{ if (include "common.ingressEnabled" .) }}cluster-ip{{ else }}nodeport{{ end }}
        tls: {{ if (include "common.ingressEnabled" .) }}false{{ else }}true{{ end }}
        authentication:
          type: {{ if (include "common.ingressEnabled" .) }}{{ .Values.config.saslMechanism }}{{ else }}tls{{ end }}
        configuration:
          {{- if not (include "common.ingressEnabled" .) }}
          bootstrap:
            nodePort: {{ .Values.global.nodePortPrefixExt }}93
          {{- end }}
          brokers:
            - broker: 0
              advertisedHost: {{ .Values.config.advertisedHost }}
              advertisedPort: {{ .Values.config.advertizedPortBroker0 }}
              {{- if not (include "common.ingressEnabled" .) }}
              nodePort: {{ .Values.global.nodePortPrefixExt }}90
              {{- end }}
            - broker: 1
              advertisedHost: {{ .Values.config.advertisedHost }}
              advertisedPort: {{ .Values.config.advertizedPortBroker1 }}
              {{- if not (include "common.ingressEnabled" .) }}
              nodePort: {{ .Values.global.nodePortPrefixExt }}91
              {{- end }}
            - broker: 2
              advertisedHost: {{ .Values.config.advertisedHost }}
              advertisedPort: {{ .Values.config.advertizedPortBroker2 }}
              {{- if not (include "common.ingressEnabled" .) }}
              nodePort: {{ .Values.global.nodePortPrefixExt }}92
              {{- end }}
    authorization:
      type: {{ .Values.config.authType }}
      superUsers:
        - {{ .Values.config.strimziKafkaAdminUser }}
    template:
      pod:
        securityContext:
          runAsUser: 0
          fsGroup: 0
    config:
      default.replication.factor: {{ .Values.replicaCount }}
      min.insync.replicas: {{ (eq 1.0 (.Values.replicaCount)) | ternary 1 (sub .Values.replicaCount 1) }}
      offsets.topic.replication.factor: {{ .Values.replicaCount }}
      num.partitions: {{ mul .Values.replicaCount 2 }}
      transaction.state.log.replication.factor: {{ .Values.replicaCount }}
      transaction.state.log.min.isr: {{ (eq 1.0 (.Values.replicaCount)) | ternary 1 (sub .Values.replicaCount 1) }}
      log.message.format.version: {{ .Values.config.kafkaVersion }}
      inter.broker.protocol.version: {{ .Values.config.kafkaVersion }}
    storage:
      type: jbod
      volumes:
      - id: 0
        type: persistent-claim
        size: {{ .Values.persistence.kafka.size }}
        deleteClaim: true
        class: {{ include "common.storageClass" (dict "dot" . "suffix" "kafka" "persistenceInfos" .Values.persistence.kafka) }}
    {{- if .Values.metrics.kafkaExporter.enabled }}
    metricsConfig:
      type: {{ .Values.metrics.kafkaExporter.metricsConfig.type }}
      valueFrom:
        configMapKeyRef:
          name: {{ include "common.fullname" . }}
          key: kafka-metrics-config.yml
    {{- end }}
  zookeeper:
    template:
      pod:
        securityContext:
          runAsUser: 0
          fsGroup: 0
    replicas: {{ .Values.replicaCount }}
    config:
      ssl.hostnameVerification: false
      ssl.quorum.hostnameVerification: false
      {{- if (include "common.onServiceMesh" .) }}
      sslQuorum: false
      {{- end }}
    storage:
      type: persistent-claim
      size: {{ .Values.persistence.zookeeper.size }}
      deleteClaim: true
      class: {{ include "common.storageClass" (dict "dot" . "suffix" "zk" "persistenceInfos" .Values.persistence.zookeeper) }}
    {{- if .Values.metrics.kafkaExporter.enabled }}
    metricsConfig:
      type: {{ .Values.metrics.kafkaExporter.metricsConfig.type }}
      valueFrom:
        configMapKeyRef:
          name: {{ include "common.fullname" . }}
          key: zookeeper-metrics-config.yml
    {{- end }}
  entityOperator:
    topicOperator: {}
    userOperator: {}
  {{- if .Values.cruiseControl.enabled }}
  cruiseControl:
    metricsConfig:
      type: {{ .Values.cruiseControl.metricsConfig.type }}
      valueFrom:
        configMapKeyRef:
          name: {{ include "common.fullname" . }}
          key: cruisecontrol-metrics-config.yml
  {{- end }}
  {{- if .Values.metrics.kafkaExporter.enabled }}
  kafkaExporter:
    topicRegex: {{ .Values.metrics.kafkaExporter.topicRegex }}
    groupRegex: {{ .Values.metrics.kafkaExporter.groupRegex }}
    resources:
      requests:
        cpu: {{ .Values.metrics.kafkaExporter.resources.requests.cpu }}
        memory: {{ .Values.metrics.kafkaExporter.resources.requests.memory }}
      limits:
        cpu: {{ .Values.metrics.kafkaExporter.resources.limits.cpu }}
        memory: {{ .Values.metrics.kafkaExporter.resources.limits.memory }}
    logging: {{ .Values.metrics.kafkaExporter.logging }}
    enableSaramaLogging: {{ .Values.metrics.kafkaExporter.enableSaramaLogging }}
    readinessProbe:
      initialDelaySeconds: {{ .Values.metrics.kafkaExporter.readinessProbe.initialDelaySeconds }}
      timeoutSeconds: {{ .Values.metrics.kafkaExporter.readinessProbe.timeoutSeconds }}
    livenessProbe:
      initialDelaySeconds: {{ .Values.metrics.kafkaExporter.livenessProbe.initialDelaySeconds }}
      timeoutSeconds: {{ .Values.metrics.kafkaExporter.livenessProbe.timeoutSeconds }}
  {{- end }}
