| apiVersion: apps/v1 |
| kind: StatefulSet |
| metadata: |
| name: {{ template "couchdb.fullname" . }} |
| labels: |
| app: {{ template "couchdb.name" . }} |
| chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} |
| release: {{ .Release.Name }} |
| heritage: {{ .Release.Service }} |
| spec: |
| replicas: {{ .Values.clusterSize }} |
| serviceName: {{ template "couchdb.fullname" . }} |
| podManagementPolicy: {{ .Values.podManagementPolicy }} |
| selector: |
| matchLabels: |
| {{ include "couchdb.ss.selector" . | indent 6 }} |
| template: |
| metadata: |
| labels: |
| {{ include "couchdb.ss.selector" . | indent 8 }} |
| {{- with .Values.annotations }} |
| annotations: |
| checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} |
| {{ toYaml . | indent 8 }} |
| {{- end }} |
| spec: |
| {{- if .Values.schedulerName }} |
| schedulerName: "{{ .Values.schedulerName }}" |
| {{- end }} |
| {{- if .Values.serviceAccount.enabled }} |
| serviceAccountName: {{ template "couchdb.serviceAccount" . }} |
| {{- end }} |
| initContainers: |
| - name: init-copy |
| image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" |
| imagePullPolicy: {{ .Values.initImage.pullPolicy }} |
| command: ['sh','-c','cp /tmp/chart.ini /default.d; cp /tmp/seedlist.ini /default.d; ls -lrt /default.d;'] |
| volumeMounts: |
| - name: config |
| mountPath: /tmp/ |
| - name: config-storage |
| mountPath: /default.d |
| {{- if .Values.adminHash }} |
| - name: admin-hash-copy |
| image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" |
| imagePullPolicy: {{ .Values.initImage.pullPolicy }} |
| command: ['sh','-c','cp /tmp/password.ini /local.d/ ;'] |
| volumeMounts: |
| - name: admin-password |
| mountPath: /tmp/password.ini |
| subPath: "password.ini" |
| - name: local-config-storage |
| mountPath: /local.d |
| {{- end }} |
| containers: |
| - name: couchdb |
| image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" |
| imagePullPolicy: {{ .Values.image.pullPolicy }} |
| ports: |
| - name: couchdb |
| containerPort: 5984 |
| - name: epmd |
| containerPort: 4369 |
| - containerPort: 9100 |
| env: |
| {{- if not .Values.allowAdminParty }} |
| - name: COUCHDB_USER |
| valueFrom: |
| secretKeyRef: |
| name: {{ template "couchdb.fullname" . }} |
| key: adminUsername |
| - name: COUCHDB_PASSWORD |
| valueFrom: |
| secretKeyRef: |
| name: {{ template "couchdb.fullname" . }} |
| key: adminPassword |
| - name: COUCHDB_SECRET |
| valueFrom: |
| secretKeyRef: |
| name: {{ template "couchdb.fullname" . }} |
| key: cookieAuthSecret |
| {{- end }} |
| - name: ERL_FLAGS |
| value: "{{ range $k, $v := .Values.erlangFlags }} -{{ $k }} {{ $v }} {{ end }}" |
| {{- if .Values.livenessProbe.enabled }} |
| livenessProbe: |
| {{- if .Values.couchdbConfig.chttpd.require_valid_user }} |
| exec: |
| command: |
| - sh |
| - -c |
| - curl -G --silent --fail -u ${COUCHDB_USER}:${COUCHDB_PASSWORD} http://localhost:5984/_up |
| {{- else }} |
| httpGet: |
| path: /_up |
| port: 5984 |
| {{- end }} |
| failureThreshold: {{ .Values.livenessProbe.failureThreshold }} |
| initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }} |
| periodSeconds: {{ .Values.livenessProbe.periodSeconds }} |
| successThreshold: {{ .Values.livenessProbe.successThreshold }} |
| timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }} |
| {{- end }} |
| {{- if .Values.readinessProbe.enabled }} |
| readinessProbe: |
| {{- if .Values.couchdbConfig.chttpd.require_valid_user }} |
| exec: |
| command: |
| - sh |
| - -c |
| - curl -G --silent --fail -u ${COUCHDB_USER}:${COUCHDB_PASSWORD} http://localhost:5984/_up |
| {{- else }} |
| httpGet: |
| path: /_up |
| port: 5984 |
| {{- end }} |
| failureThreshold: {{ .Values.readinessProbe.failureThreshold }} |
| initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }} |
| periodSeconds: {{ .Values.readinessProbe.periodSeconds }} |
| successThreshold: {{ .Values.readinessProbe.successThreshold }} |
| timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }} |
| {{- end }} |
| resources: |
| {{ toYaml .Values.resources | indent 12 }} |
| volumeMounts: |
| - name: config-storage |
| mountPath: /opt/couchdb/etc/default.d |
| {{- if .Values.adminHash }} |
| - name: local-config-storage |
| mountPath: /opt/couchdb/etc/local.d |
| {{- end }} |
| - name: database-storage |
| mountPath: /opt/couchdb/data |
| {{- if .Values.enableSearch }} |
| - name: clouseau |
| image: "{{ .Values.searchImage.repository }}:{{ .Values.searchImage.tag }}" |
| imagePullPolicy: {{ .Values.searchImage.pullPolicy }} |
| volumeMounts: |
| - name: database-storage |
| mountPath: /opt/couchdb-search/data |
| {{- end }} |
| {{- if .Values.sidecars }} |
| {{ toYaml .Values.sidecars | indent 8}} |
| {{- end }} |
| {{- if .Values.nodeSelector }} |
| nodeSelector: |
| {{ toYaml .Values.nodeSelector | indent 8 }} |
| {{- end }} |
| {{- with .Values.tolerations }} |
| tolerations: |
| {{ toYaml . | indent 8 }} |
| {{- end }} |
| {{- with .Values.affinity }} |
| affinity: |
| {{ toYaml . | indent 8 }} |
| {{- end }} |
| volumes: |
| - name: config-storage |
| emptyDir: {} |
| - name: config |
| configMap: |
| name: {{ template "couchdb.fullname" . }} |
| items: |
| - key: inifile |
| path: chart.ini |
| - key: seedlistinifile |
| path: seedlist.ini |
| |
| {{- if .Values.adminHash }} |
| - name: local-config-storage |
| emptyDir: {} |
| - name: admin-password |
| secret: |
| secretName: {{ template "couchdb.fullname" . }} |
| {{- end -}} |
| |
| {{- if not .Values.persistentVolume.enabled }} |
| - name: database-storage |
| emptyDir: {} |
| {{- else }} |
| volumeClaimTemplates: |
| - metadata: |
| name: database-storage |
| labels: |
| app: {{ template "couchdb.name" . }} |
| release: {{ .Release.Name }} |
| spec: |
| accessModes: |
| {{- range .Values.persistentVolume.accessModes }} |
| - {{ . | quote }} |
| {{- end }} |
| resources: |
| requests: |
| storage: {{ .Values.persistentVolume.size | quote }} |
| {{- if .Values.persistentVolume.storageClass }} |
| {{- if (eq "-" .Values.persistentVolume.storageClass) }} |
| storageClassName: "" |
| {{- else }} |
| storageClassName: "{{ .Values.persistentVolume.storageClass }}" |
| {{- end }} |
| {{- end }} |
| {{- end }} |