apiVersion: batch/v1 kind: Job metadata: name: clickhouse-db-init labels: app.kubernetes.io/name: clickhouse-db-init app.kubernetes.io/instance: {{ .Release.Name }} annotations: checksum/config: {{ include (print $.Template.BasePath "/init-sql-configmap.yaml") . | sha256sum }} spec: template: spec: restartPolicy: OnFailure containers: - name: clickhouse-init image: clickhouse/clickhouse-server:{{ .Chart.AppVersion }} command: ["bash", "-c"] args: - | echo "⏳ Waiting for ClickHouse..." until clickhouse-client \ --host {{ .Values.clickhouse.host }} \ --port {{ .Values.clickhouse.port }} \ --user {{ .Values.clickhouse.adminUser }} \ --password "{{ .Values.clickhouse.adminPassword }}" \ -q "SELECT 1" >/dev/null 2>&1; do sleep 2 done echo "✅ ClickHouse ready" {{- if .Values.databases }} echo "➡️ Creating declared databases & users..." clickhouse-client \ --host {{ .Values.clickhouse.host }} \ --port {{ .Values.clickhouse.port }} \ --user {{ .Values.clickhouse.adminUser }} \ --password "{{ .Values.clickhouse.adminPassword }}" \ --multiquery < /config/init.sql {{- end }} echo "➡️ Generating list of databases to drop..." clickhouse-client \ --host {{ .Values.clickhouse.host }} \ --port {{ .Values.clickhouse.port }} \ --user {{ .Values.clickhouse.adminUser }} \ --password "{{ .Values.clickhouse.adminPassword }}" \ -q " SELECT concat('DROP DATABASE IF EXISTS ', name, ';') FROM system.databases WHERE name NOT IN ( 'system', 'information_schema', 'INFORMATION_SCHEMA', 'default' {{- if .Values.databases }} {{- range $db := .Values.databases }} , '{{ $db }}' {{- end }} {{- end }} ); " > /tmp/to_drop.sql if [ -s /tmp/to_drop.sql ]; then echo "➡️ Dropping leftover databases:" cat /tmp/to_drop.sql clickhouse-client \ --host {{ .Values.clickhouse.host }} \ --port {{ .Values.clickhouse.port }} \ --user {{ .Values.clickhouse.adminUser }} \ --password "{{ .Values.clickhouse.adminPassword }}" \ --multiquery < /tmp/to_drop.sql else echo "✔️ No databases to drop." fi echo "🎉 Initialization completed" volumeMounts: - name: init-sql mountPath: /config volumes: - name: init-sql configMap: name: clickhouse-init-sql