Automatically finalize the cluster with a post-install job (#108)
Create a job after the installation to finalize the cluster. The job can also create default databases such as _global_changes.
diff --git a/couchdb/Chart.yaml b/couchdb/Chart.yaml
index 2dfde9a..027ee63 100644
--- a/couchdb/Chart.yaml
+++ b/couchdb/Chart.yaml
@@ -1,6 +1,6 @@
apiVersion: v1
name: couchdb
-version: 4.0.0
+version: 4.1.0
appVersion: 3.2.1
description: A database featuring seamless multi-master sync, that scales from
big data to mobile, with an intuitive HTTP/JSON API and designed for
diff --git a/couchdb/NEWS.md b/couchdb/NEWS.md
index 1aefac1..9aef513 100644
--- a/couchdb/NEWS.md
+++ b/couchdb/NEWS.md
@@ -1,5 +1,9 @@
# NEWS
+## 4.1.0
+
+- Added the `autoSetup` to automatically finalize the cluster after installation
+
## 4.0.0
- Simplified the `adminHash` in the secret
diff --git a/couchdb/README.md b/couchdb/README.md
index 5b6c8b0..364600b 100644
--- a/couchdb/README.md
+++ b/couchdb/README.md
@@ -1,6 +1,6 @@
# CouchDB
-![Version: 4.0.0](https://img.shields.io/badge/Version-4.0.0-informational?style=flat-square) ![AppVersion: 3.2.1](https://img.shields.io/badge/AppVersion-3.2.1-informational?style=flat-square)
+![Version: 4.1.0](https://img.shields.io/badge/Version-4.1.0-informational?style=flat-square) ![AppVersion: 3.2.1](https://img.shields.io/badge/AppVersion-3.2.1-informational?style=flat-square)
Apache CouchDB is a database featuring seamless multi-master sync, that scales
from big data to mobile, with an intuitive HTTP/JSON API and designed for
@@ -18,7 +18,7 @@
```bash
$ helm repo add couchdb https://apache.github.io/couchdb-helm
$ helm install couchdb/couchdb \
- --version=4.0.0 \
+ --version=4.1.0 \
--set allowAdminParty=true \
--set couchdbConfig.couchdb.uuid=$(curl https://www.uuidgenerator.net/api/version4 2>/dev/null | tr -d -)
```
@@ -44,7 +44,7 @@
```bash
$ helm install \
--name my-release \
- --version=4.0.0 \
+ --version=4.1.0 \
--set couchdbConfig.couchdb.uuid=decafbaddecafbaddecafbaddecafbad \
couchdb/couchdb
```
@@ -78,7 +78,7 @@
```bash
$ helm install \
--name my-release \
- --version=4.0.0 \
+ --version=4.1.0 \
--set createAdminSecret=false \
--set couchdbConfig.couchdb.uuid=decafbaddecafbaddecafbaddecafbad \
couchdb/couchdb
@@ -133,7 +133,7 @@
```bash
$ helm repo add couchdb https://apache.github.io/couchdb-helm
-$ helm upgrade my-release --version=4.0.0 couchdb/couchdb
+$ helm upgrade my-release --version=4.1.0 couchdb/couchdb
```
## Configuration
@@ -193,6 +193,11 @@
| `annotations` | |
| `tolerations` | |
| `resources` | |
+| `autoSetup.enabled` | false (if set to true, must have `service.enabled` set to true and a correct `adminPassword` - deploy it with the `--wait` flag to avoid first jobs failure) |
+| `autoSetup.image.repository` | alpine/curl |
+| `autoSetup.image.tag` | latest |
+| `autoSetup.image.pullPolicy` | Always |
+| `autoSetup.defaultDatabases` | [`_global_changes`] |
| `service.annotations` | |
| `service.enabled` | true |
| `service.type` | ClusterIP |
diff --git a/couchdb/README.md.gotmpl b/couchdb/README.md.gotmpl
index 28d8761..3eefec8 100644
--- a/couchdb/README.md.gotmpl
+++ b/couchdb/README.md.gotmpl
@@ -184,7 +184,12 @@
| `topologySpreadConstraints` | |
| `annotations` | |
| `tolerations` | |
-| `resources` | | |
+| `resources` | |
+| `autoSetup.enabled` | false (if set to true, must have `service.enabled` set to true and a correct `adminPassword` - deploy it with the `--wait` flag to avoid first jobs failure) |
+| `autoSetup.image.repository` | alpine/curl |
+| `autoSetup.image.tag` | latest |
+| `autoSetup.image.pullPolicy` | Always |
+| `autoSetup.defaultDatabases` | [`_global_changes`] |
| `service.annotations` | |
| `service.enabled` | true |
| `service.type` | ClusterIP |
diff --git a/couchdb/templates/NOTES.txt b/couchdb/templates/NOTES.txt
index 0727ca1..7a9dccd 100644
--- a/couchdb/templates/NOTES.txt
+++ b/couchdb/templates/NOTES.txt
@@ -2,7 +2,7 @@
kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "couchdb.name" . }},release={{ .Release.Name }}"
-Once all of the Pods are fully Ready, execute the following command to create
+Skip this step if autoSetup is enabled - Once all of the Pods are fully Ready, execute the following command to create
some required system databases:
kubectl exec --namespace {{ .Release.Namespace }} {{ if not .Values.allowAdminParty }}-it {{ end }}{{ template "couchdb.fullname" . }}-0 -c couchdb -- \
diff --git a/couchdb/templates/job.yaml b/couchdb/templates/job.yaml
new file mode 100644
index 0000000..fa5aafc
--- /dev/null
+++ b/couchdb/templates/job.yaml
@@ -0,0 +1,50 @@
+{{- if .Values.autoSetup -}}
+{{- if and .Values.autoSetup.enabled .Values.service.enabled -}}
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: "{{ .Release.Name }}-post-install"
+ labels:
+ app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
+ app.kubernetes.io/instance: {{ .Release.Name | quote }}
+ app.kubernetes.io/version: {{ .Chart.AppVersion }}
+ helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ annotations:
+ "helm.sh/hook": post-install
+spec:
+ template:
+ metadata:
+ name: "{{ .Release.Name }}-post-install"
+ labels:
+ app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
+ app.kubernetes.io/instance: {{ .Release.Name | quote }}
+ helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ spec:
+ restartPolicy: OnFailure
+ containers:
+ - name: cluster-setup
+ image: {{ .Values.autoSetup.image.repository }}:{{ .Values.autoSetup.image.tag }}
+ imagePullPolicy: {{ .Values.autoSetup.image.pullPolicy }}
+ command:
+ - 'sh'
+ - '-c'
+ - 'curl -s http://$COUCHDB_ADDRESS/_cluster_setup -X POST -H "Content-Type: application/json" -d "{\"action\": \"finish_cluster\"}" -u $COUCHDB_ADMIN:$COUCHDB_PASS && export IFS=","; for db_name in $DEFAULT_DBS; do curl -X PUT http://$COUCHDB_ADDRESS/$db_name -u $COUCHDB_ADMIN:$COUCHDB_PASS; done'
+ env:
+ - name: DEFAULT_DBS
+ value: {{ join "," .Values.autoSetup.defaultDatabases }}
+ - name: COUCHDB_ADDRESS
+ value: "{{ template "couchdb.svcname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.service.externalPort}}"
+ - name: COUCHDB_ADMIN
+ valueFrom:
+ secretKeyRef:
+ name: {{ template "couchdb.fullname" . }}
+ key: adminUsername
+ - name: COUCHDB_PASS
+ valueFrom:
+ secretKeyRef:
+ name: {{ template "couchdb.fullname" . }}
+ key: adminPassword
+ backoffLimit: 2
+ ttlSecondsAfterFinished: 600
+{{- end -}}
+{{- end -}}
diff --git a/couchdb/values.yaml b/couchdb/values.yaml
index bc61ca2..1deb2c5 100644
--- a/couchdb/values.yaml
+++ b/couchdb/values.yaml
@@ -9,6 +9,21 @@
# ref: https://kubernetes.io/docs/concepts/configuration/secret/
allowAdminParty: false
+# Set it to true to automatically enable the cluster after installation.
+# It will create a post-install job that will send the {"action": "finish_cluster"}
+# message to CouchDB to finalize the cluster and add the defaultDatabases listed.
+# Note that this job needs service.enabled to be set to true and if you use adminHash,
+# a valid adminPassword in the secret. Also set the --wait flag when you install to
+# avoid first jobs failure (helm install --wait ...)
+autoSetup:
+ enabled: false
+ image:
+ repository: alpine/curl
+ tag: latest
+ pullPolicy: Always
+ defaultDatabases:
+ - _global_changes
+
# -- If createAdminSecret is enabled a Secret called <ReleaseName>-couchdb will
# be created containing auto-generated credentials. Users who prefer to set
# these values themselves have a couple of options: