{{/*
# 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: {{ .Values.service.name }}
  replicas: {{ .Values.replicaCount }}
  template:
    metadata:
      labels:
        app: {{ include "common.name" . }}
        chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
        release: {{ .Release.Name }}
        heritage: {{ .Release.Service }}
    spec:
      initContainers:
#{{ if not .Values.disableNfsProvisioner }}
      - name: {{ include "common.name" . }}-readiness
        command:
        - /root/ready.py
        args:
        - --container-name
        - {{ .Values.nfsprovisionerPrefix }}-nfs-provisioner
        env:
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        image: "{{ .Values.global.readinessRepository }}/{{ .Values.global.readinessImage }}"
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
#{{ end }}
      - name: init-mysql
        image: "{{ .Values.dockerHubRepository }}/{{ .Values.image }}"
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        command:
        - bash
        - "-c"
        - |
          set -ex
          # Generate mysql server-id from pod ordinal index.
          [[ `hostname` =~ -([0-9]+)$ ]] || exit 1
          ordinal=${BASH_REMATCH[1]}
          siteId={{ .Values.geoSiteId }}
          echo BASH_REMATCH=${BASH_REMATCH}
          echo [mysqld] > /mnt/conf.d/server-id.cnf
          # Add an offset to avoid reserved server-id=0 value.
          echo server-id=$(($siteId*100 + $ordinal)) >> /mnt/conf.d/server-id.cnf
          # Copy appropriate conf.d files from config-map to emptyDir.
          if [[ $ordinal -eq 0 ]]; then
            cp /mnt/config-map/master.cnf /mnt/conf.d/
          else
            cp /mnt/config-map/slave.cnf /mnt/conf.d/
          fi
        volumeMounts:
        - name: conf
          mountPath: /mnt/conf.d
        - name: config-map
          mountPath: /mnt/config-map

      - name: clone-mysql
        image: "{{ .Values.global.xtrabackupRepository | default .Values.xtrabackupRepository }}/{{ .Values.xtrabackupImage }}"
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        env:
          - name: MYSQL_ROOT_PASSWORD
            valueFrom:
              secretKeyRef:
                name: {{ template "common.fullname" . }}
                key: db-root-password
        command:
        - bash
        - "-c"
        - |
          set -ex
          # Skip the clone if data already exists.
          [[ -d /var/lib/mysql/mysql ]] && exit 0
          # Skip the clone on master (ordinal index 0).
          [[ `hostname` =~ -([0-9]+)$ ]] || exit 1
          ordinal=${BASH_REMATCH[1]}
          echo ${BASH_REMATCH}
          [[ $ordinal -eq 0 ]] && exit 0
          # Clone data from previous peer.
          ncat --recv-only {{ include "common.fullname" . }}-$(($ordinal-1)).{{ .Values.service.name }}.{{ include "common.namespace" . }} 3307 | xbstream -x -C {{ .Values.persistence.mysqlPath }}
          # Prepare the backup.
          xtrabackup --user=root --password=$MYSQL_ROOT_PASSWORD --prepare --target-dir=/var/lib/mysql
          ls -l {{ .Values.persistence.mysqlPath }}
        volumeMounts:
        - name: {{ include "common.fullname" . }}-mysql
          mountPath: {{ .Values.persistence.mysqlPath }}
        - name: conf
          mountPath: /etc/mysql/conf.d

      containers:
        - name: {{ include "common.name" . }}
          image: "{{ .Values.dockerHubRepository }}/{{ .Values.image }}"
          imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
          ports:
          - containerPort: {{ .Values.service.internalPort }}
          # disable liveness probe when breakpoints set in debugger
          # so K8s doesn't restart unresponsive container
          {{- if eq .Values.liveness.enabled true }}
          livenessProbe:
            exec:
              command: ["mysqladmin", "ping"]
            initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
            periodSeconds: {{ .Values.liveness.periodSeconds }}
            timeoutSeconds: {{ .Values.liveness.timeoutSeconds }}
          {{end -}}
          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: MYSQL_ROOT_HOST
              value: '%'
            - name: MYSQL_ALLOW_EMPTY_PASSWORD
              value: {{ .Values.config.dbAllowEmptyPassword | default "0" | quote }}
          volumeMounts:
          - mountPath: {{ .Values.persistence.mysqlPath }}
            name: {{ include "common.fullname" . }}-mysql
          - mountPath: /etc/mysql/conf.d
            name: conf
          resources:
{{ include "common.resources" . | indent 12 }}
        {{- if .Values.nodeSelector }}
        nodeSelector:
{{ toYaml .Values.nodeSelector | indent 10 }}
        {{- end -}}
        {{- if .Values.affinity }}
        affinity:
{{ toYaml .Values.affinity | indent 10 }}
        {{- end }}

        - name: xtrabackup
          image: "{{ .Values.global.xtrabackupRepository | default .Values.xtrabackupRepository }}/{{ .Values.xtrabackupImage }}"
          imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: {{ template "common.fullname" . }}
                  key: db-root-password
          ports:
          - containerPort: {{ .Values.xtrabackup.internalPort }}
            name: xtrabackup
          command:
          - bash
          - "-c"
          - |
            set -ex
            cd {{ .Values.persistence.mysqlPath }}
            ls -l
            # Determine binlog position of cloned data, if any.
            if [[ -f xtrabackup_slave_info ]]; then
              echo "Inside xtrabackup_slave_info"
              # XtraBackup already generated a partial "CHANGE MASTER TO" query
              # because we're cloning from an existing slave.
              mv xtrabackup_slave_info change_master_to.sql.in
              # Ignore xtrabackup_binlog_info in this case (it's useless).
              rm -f xtrabackup_binlog_info
            elif [[ -f xtrabackup_binlog_info ]]; then
              echo "Inside xtrabackup_binlog_info"
              # We're cloning directly from master. Parse binlog position.
              [[ `cat xtrabackup_binlog_info` =~ ^(.*?)[[:space:]]+(.*?)$ ]] || exit 1
              rm xtrabackup_binlog_info
              echo "CHANGE MASTER TO MASTER_LOG_FILE='${BASH_REMATCH[1]}',\
                    MASTER_LOG_POS=${BASH_REMATCH[2]}" > change_master_to.sql.in
            fi

            [[ `hostname` =~ -([0-9]+)$ ]] || exit 1
            ordinal=${BASH_REMATCH[1]}
            echo $ordinal

            mysqlhost={{ include "common.fullname" . }}-$(($ordinal)).{{ .Values.service.name }}.{{ include "common.namespace" . }}
            echo $mysqlhost

            # Check if we need to complete a clone by starting replication.
            if [[ -f change_master_to.sql.in ]]; then
              echo "Waiting for mysqld to be ready (accepting connections)"
              until mysql --user=root --password=$MYSQL_ROOT_PASSWORD -h $mysqlhost -e "SELECT 1"; do sleep 1; done

              echo "Initializing replication from clone position"
              # In case of container restart, attempt this at-most-once.
              mv change_master_to.sql.in change_master_to.sql.orig
              mysql --user=root --password=$MYSQL_ROOT_PASSWORD -h $mysqlhost <<EOF
            $(<change_master_to.sql.orig),
              MASTER_HOST="{{ include "common.fullname" . }}-0.{{ .Values.service.name }}.{{ include "common.namespace" . }}",
              MASTER_USER="root",
              MASTER_PASSWORD="$MYSQL_ROOT_PASSWORD",
              MASTER_CONNECT_RETRY=10;
            START SLAVE;
            EOF
            fi

            # Start a server to send backups when requested by peers.
            exec ncat --listen --keep-open --send-only --max-conns=1 3307 -c \
              "xtrabackup --user=root --password=$MYSQL_ROOT_PASSWORD --backup --slave-info --stream=xbstream --host=$mysqlhost"
          volumeMounts:
          - name: {{ include "common.fullname" . }}-mysql
            mountPath: {{ .Values.persistence.mysqlPath }}
          - name: conf
            mountPath: /etc/mysql/conf.d
      volumes:
      - name: conf
        emptyDir: {}
      - name: config-map
        configMap:
          name: {{ include "common.fullname" . }}-db-configmap
      - name: localtime
        hostPath:
          path: /etc/localtime
      - name: {{ include "common.fullname" . }}-mysql
  {{ if not .Values.persistence.enabled }}
      - name: {{ include "common.fullname" . }}-mysql
        emptyDir: {}
  {{ else }}
  volumeClaimTemplates:
  - metadata:
      name: {{ include "common.fullname" . }}-mysql
      labels:
        app: {{ include "common.name" . }}
        chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
        release: {{ .Release.Name }}
        heritage: {{ .Release.Service }}
        name: {{ include "common.fullname" . }}
    spec:
      accessModes: [ {{ .Values.persistence.accessMode }} ]
      storageClassName: {{ include "common.fullname" . }}-mysql
      resources:
        requests:
          storage: {{ .Values.persistence.size }}
      selector:
        matchLabels:
          name: {{ include "common.fullname" . }}
  {{ end }}
