# Copyright © 2017 Amdocs, Bell Canada
#
# Licensed 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.

apiVersion: batch/v1
kind: Job
metadata:
  name: {{ .Release.Name }}-create-config
  namespace: {{ include "common.namespace" . }}
  labels:
    app: {{ include "common.name" . }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  template:
    metadata:
      labels:
        app: aaf-init-job
        release: {{ .Release.Name }}
    spec:
      containers:
      - name: {{ include "common.name" . }}-config-container
        image: "{{ include "common.repository" . }}/{{ .Values.aaf_config.image }}"
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        volumeMounts:
        - mountPath: "/opt/app/osaaf"
          name: {{ include "common.name" . }}-config-vol
        env:
          - name: HOSTNAME
            value: "{{ .Values.global.cadi.hostname }}"
          - name: AAF_ENV
            value: "{{ .Values.global.cadi.aaf_env }}"
          - name: AAF_REGISTER_AS
            value: "{{ .Values.global.cadi.aaf_register_as }}"
          - name: LATITUDE
            value: "{{ .Values.global.cadi.cadi_latitude }}"
          - name: LONGITUDE
            value: "{{ .Values.global.cadi.cadi_longitude }}"
          - name: CASS_HOST
            value: "{{ .Values.global.cassandraServiceName }}"
          - name: AAF_LOCATOR_AS
            value: "{{ .Values.global.locateServiceName }}"
        resources:
{{ include "common.resources" . | indent 12 }}
      {{- if .Values.nodeSelector }}
      nodeSelector:
{{ toYaml .Values.nodeSelector | indent 10 }}
      {{- end -}}
      {{- if .Values.affinity }}
      affinity:
{{ toYaml .Values.affinity | indent 10 }}
      {{- end }}
      volumes:
      - name: {{ include "common.name" . }}-config-vol
      {{- if .Values.global.persistence.enabled }}
        persistentVolumeClaim:
          claimName: {{ .Release.Name }}-config
      {{- else }}
        emptyDir: {}
      {{- end }}
      restartPolicy: OnFailure
      imagePullSecrets:
      - name: "{{ include "common.namespace" . }}-docker-registry-key"
