# *****************************************************************************
#
# 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: apps/v1
kind: StatefulSet
metadata:
  name: {{ include "step-certificates.fullname" . }}
  labels:
  {{ include "step-certificates.labels" . | indent 4 }}
spec:
  # Only one replica is supported at this moment
  # Requested {{ .Values.replicaCount }}
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ include "step-certificates.name" . }}
      app.kubernetes.io/instance: {{ .Release.Name }}
  serviceName: {{ include "step-certificates.fullname" . }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ include "step-certificates.name" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
    spec:
{{- if .Release.IsInstall }}
initContainers:
  - name: {{ .Chart.Name }}-init
    image: busybox:latest
    imagePullPolicy: {{ .Values.image.pullPolicy }}
    command: ["sleep", "20"]
{{- end }}
securityContext:
  {{- if .Values.ca.runAsRoot }}
  runAsUser: 0
  {{- else }}
  runAsUser: 1000
  runAsNonRoot: true
  runAsGroup: 1000
  fsGroup: 1000
  allowPrivilegeEscalation: false
  {{- end }}
containers:
  - name: {{ .Chart.Name }}
    image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
    imagePullPolicy: {{ .Values.image.pullPolicy }}
    command: ["/usr/local/bin/step-ca",
              "--password-file", "/home/step/secrets/passwords/password",
              "/home/step/config/ca.json"]
    env:
      - name: NAMESPACE
        value: "{{ .Release.Namespace }}"
    ports:
      - name: https
        containerPort: {{ .Values.service.targetPort }}
        protocol: TCP
    livenessProbe:
      initialDelaySeconds: 5
      httpGet:
        path: /health
        port: {{ .Values.service.targetPort }}
        scheme: HTTPS
    readinessProbe:
      initialDelaySeconds: 5
      httpGet:
        path: /health
        port: {{ .Values.service.targetPort }}
        scheme: HTTPS
    resources:
      {{- toYaml .Values.resources | nindent 12 }}
    volumeMounts:
      - name: certs
        mountPath: /home/step/certs
        readOnly: true
      - name: config
        mountPath: /home/step/config
        readOnly: true
      - name: secrets
        mountPath: /home/step/secrets
        readOnly: true
      - name: ca-password
        mountPath: /home/step/secrets/passwords
        readOnly: true
    {{- if .Values.ca.db.enabled }}
    - name: database
      mountPath: /home/step/db
      readOnly: false
    {{- end }}
volumes:
  - name: certs
    configMap:
      name: {{ include "step-certificates.fullname" . }}-certs
  - name: config
configMap:
  name: {{ include "step-certificates.fullname" . }}-config
  - name: secrets
configMap:
  name: {{ include "step-certificates.fullname" . }}-secrets
  - name: ca-password
secret:
  secretName: {{ include "step-certificates.fullname" . }}-ca-password
  {{- if and .Values.ca.db.enabled (not .Values.ca.db.persistent) }}
  - name: database
emptyDir: {}
  {{- end }}
  {{- with .Values.nodeSelector }}
nodeSelector:
  {{- toYaml . | nindent 8 }}
  {{- end }}
  {{- with .Values.affinity }}
affinity:
  {{- toYaml . | nindent 8 }}
  {{- end }}
  {{- with .Values.tolerations }}
tolerations:
  {{- toYaml . | nindent 8 }}
  {{- end }}
{{- if and .Values.ca.db.enabled .Values.ca.db.persistent }}
volumeClaimTemplates:
  - metadata:
      name: database
      labels:
        app.kubernetes.io/name: {{ include "step-certificates.name" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        app.kubernetes.io/managed-by: {{ .Release.Service }}
    spec:
      accessModes:
      {{- range .Values.ca.db.accessModes }}
      - {{ . | quote }}
      {{- end }}
      resources:
        requests:
          storage: {{ .Values.ca.db.size | quote }}
    {{- if .Values.ca.db.storageClass }}
    {{- if (eq "-" .Values.ca.db.storageClass) }}
    storageClassName: ""
    {{- else }}
    storageClassName: {{ .Values.ca.db.storageClass | quote }}
    {{- end }}
    {{- end }}
{{- end }}