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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: xos-db
  labels:
    app: xos-db
spec:
  replicas: 1
  selector:
    matchLabels:
      name: xos-db
      release: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app: xos-db
    spec:
      containers:
        - name: xos-db
          image: {{ .Values.global.registry }}{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }}
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - containerPort: 5432
              protocol: TCP
          env:
            - name: POSTGRES_DB
              value: {{ .Values.xosDBName | quote }}
            - name: POSTGRES_USER
              value: {{ .Values.xosDBUser | quote }}
            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: xos-db-secrets
                  key: password
            - name: PGDATA
              value: "/var/lib/postgresql/data/pgdata"
          volumeMounts:
            - name: xos-db-config
              mountPath: /usr/local/share/postgresql/postgresql.conf.sample
              subPath: config/postgresql.conf.sample
{{- if .Values.needDBPersistence }}
            - name: db-pv-storage
              mountPath: "/var/lib/postgresql/data"
{{- end }}
      volumes:
        - name: xos-db-config
          configMap:
            name: xos-db
            items:
              - key: config
                path: config/postgresql.conf.sample
{{- if .Values.needDBPersistence }}
        - name: db-pv-storage
          persistentVolumeClaim:
            claimName: {{ .Values.pvClaimName }}
{{- include "xos-db.persistent-volume-claim" . }}
{{- end }}
