#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#
{{- if .Values.init.enabled }}
apiVersion: batch/v1
kind: Job
metadata:
  name: {{ template "superset.name" . }}-init-db
  annotations:
    "helm.sh/hook": post-install,post-upgrade
    "helm.sh/hook-delete-policy": "before-hook-creation"
spec:
  template:
    metadata:
      name: {{ template "superset.name" . }}-init-db
    spec:
      securityContext:
        runAsUser: 0 # Needed in order to allow pip install to work in bootstrap
      {{- if .Values.init.initContainers }}
      initContainers:
      {{-  tpl (toYaml .Values.init.initContainers) . | nindent 6 }}
      {{- end }}
      containers:
      - name: {{ template "superset.name" . }}-init-db
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        {{ if .Values.extraEnv }}
        env:
          {{- range $key, $value := .Values.extraEnv }}
          - name: {{ $key | quote }}
            value: {{ $value | quote }}
          {{- end }}
        {{- end }}
        envFrom:
          - secretRef:
              name: {{ tpl .Values.envFromSecret . }}
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        volumeMounts:
          - name: superset-config
            mountPath: {{ .Values.configMountPath | quote }}
            readOnly: true
        {{ if .Values.extraConfigs }}
          - name: superset-extra-config
            mountPath: {{ .Values.extraConfigMountPath | quote }}
            readOnly: true
        {{- end }}
        command: {{  tpl (toJson .Values.init.command) . }}
      volumes:
        - name: superset-config
          secret:
            secretName: {{ tpl .Values.configFromSecret . }}
        {{- if .Values.extraConfigs }}
        - name: superset-extra-config
          configMap:
            name: {{ template "superset.fullname" . }}-extra-config
        {{- end }}
      restartPolicy: Never
{{- end }}
