86 lines
3.1 KiB
YAML
86 lines
3.1 KiB
YAML
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
|