#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#

{{ if not .Values.db.external }}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-couchdb
  labels:
    name: {{ .Release.Name }}-couchdb
{{ include "openwhisk.label_boilerplate" . | indent 4 }}
spec:
  replicas: {{ .Values.db.replicaCount }}
  selector:
    matchLabels:
      name: {{ .Release.Name }}-couchdb
  template:
    metadata:
      labels:
        name: {{ .Release.Name }}-couchdb
{{ include "openwhisk.label_boilerplate" . | indent 8 }}
    spec:
      restartPolicy: {{ .Values.db.restartPolicy }}

      {{- if .Values.affinity.enabled }}
      affinity:
{{ include "openwhisk.affinity.core" . | indent 8 }}
{{ include "openwhisk.affinity.selfAntiAffinity" ( printf "%s-couchdb" .Release.Name ) | indent 8 }}
      {{- end }}

      {{- if .Values.toleration.enabled }}
      tolerations:
{{ include "openwhisk.toleration.core" . | indent 8 }}
      {{- end }}

{{ include "openwhisk.docker.imagePullSecrets" . | indent 6 }}
      containers:
      - name: couchdb
        image: "{{- .Values.docker.registry.name -}}{{- .Values.db.imageName -}}:{{- .Values.db.imageTag -}}"
        imagePullPolicy: {{ .Values.db.imagePullPolicy | quote }}
        ports:
        - name: couchdb
          containerPort: {{ .Values.db.port }}
        env:
        - name: "COUCHDB_USER"
          valueFrom:
            secretKeyRef:
              name: {{ .Release.Name }}-db.auth
              key: db_username
        - name: "COUCHDB_PASSWORD"
          valueFrom:
            secretKeyRef:
              name: {{ .Release.Name }}-db.auth
              key: db_password
        - name: "NODENAME"
          value: "couchdb0"
        {{- if .Values.k8s.persistence.enabled }}
        volumeMounts:
          - name: database-storage
            mountPath: /opt/couchdb/data
        {{- end }}
      {{- if .Values.k8s.persistence.enabled }}
      volumes:
        - name: database-storage
          persistentVolumeClaim:
            claimName: {{ .Release.Name }}-couchdb-pvc
      {{- end }}
{{ end }}
