#
# 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.
#

apiVersion: batch/v1
kind: Job
metadata:
  name: {{ .Release.Name }}-gen-certs
  labels:
    name: {{ .Release.Name }}-gen-certs
{{ include "openwhisk.label_boilerplate" . | indent 4 }}
spec:
  backoffLimit: 3
  template:
    metadata:
      name: {{ .Release.Name }}-gen-certs
      labels:
        name: {{ .Release.Name }}-gen-certs
{{ include "openwhisk.label_boilerplate" . | indent 8 }}
    spec:
      serviceAccountName: {{ .Release.Name }}-init-sa
      restartPolicy: Never
      volumes:
      - name: task-dir
        configMap:
          name: {{ .Release.Name }}-gen-certs
{{ include "openwhisk.docker.imagePullSecrets" . | indent 6 }}
      containers:
      - name: gen-certs
        image: "{{- .Values.docker.registry.name -}}{{- .Values.utility.imageName -}}:{{- .Values.utility.imageTag -}}"
        imagePullPolicy: {{ .Values.utility.imagePullPolicy | quote }}
        command: ["/bin/bash", "-c", "set -e; . /task/gencerts.sh"]
        volumeMounts:
        - name: task-dir
          mountPath: "/task/gencerts.sh"
          subPath: "gencerts.sh"
        env:
        - name: "NGINX_CERT_SECRET"
          value: {{ .Release.Name }}-nginx
        - name: "WHISK_API_HOST_NAME"
          valueFrom:
            configMapKeyRef:
              name: {{ .Release.Name }}-whisk.config
              key: whisk_api_host_name
