{{/*
# Copyright © 2019 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: apps/v1
kind: StatefulSet
metadata:
  name: {{ include "common.fullname" . }}
  namespace: {{ include "common.namespace" . }}
  labels:
    app: {{ include "common.name" . }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ include "common.release" . }}
    heritage: {{ .Release.Service }}
spec:
  podManagementPolicy: OrderedReady
  replicas: {{ .Values.replicaCount }}
  serviceName: {{ include "common.fullname" . }}
  selector:
    matchLabels:
      app: {{ include "common.fullname" . }}
      name: {{ include "common.name" . }}-web-deploy
      service: django
  template:
    metadata:
      labels:
        app: {{ include "common.fullname" . }}
        name: {{ include "common.name" . }}-web-deploy
        release: {{ include "common.release" . }}
        service: django
    spec:

      initContainers:
      - name: {{ include "common.name" . }}-init-readiness
        image: {{ include "repositoryGenerator.image.readiness" . }}
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        command:
        - /app/ready.py
        args:
        - --container-name
        - {{ include "common.name" . }}-mgnt
        env:
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace

      containers:

      - image: {{ include "repositoryGenerator.dockerHubRepository" . }}/{{ .Values.image.web }}
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        name: {{ include "common.name" . }}-web
        ports:
        - containerPort: {{ .Values.service.web.internalPort }}
          protocol: TCP
        resources:
          requests:
            cpu: 500m
            memory: 1Gi
        volumeMounts:
        - mountPath: /etc/tower/settings.py
          name: awx-application-config
          readOnly: true
          subPath: settings.py
        - mountPath: /etc/tower/conf.d/
          name: awx-application-credentials
          readOnly: true
        - mountPath: /etc/tower/SECRET_KEY
          name: awx-secret-key
          readOnly: true
          subPath: SECRET_KEY
      - command: ["/bin/sh","-c"]
        args: ["/usr/bin/launch_awx_task.sh"]
        env:
        - name: AWX_SKIP_MIGRATIONS
          value: "1"

        image: {{ include "repositoryGenerator.dockerHubRepository" . }}/{{ .Values.image.task }}
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        name: {{ include "common.name" . }}-celery
        resources:
          requests:
            cpu: 1500m
            memory: 2Gi
        securityContext:
          privileged: true
        volumeMounts:
        - mountPath: /etc/tower/settings.py
          name: awx-application-config
          readOnly: true
          subPath: settings.py
        - mountPath: /etc/tower/conf.d/
          name: awx-application-credentials
          readOnly: true
        - mountPath: /etc/tower/SECRET_KEY
          name: awx-secret-key
          readOnly: true
          subPath: SECRET_KEY
      - env:
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: status.podIP
        - name: RABBITMQ_USE_LONGNAME
          value: "true"
        - name: RABBITMQ_NODENAME
          value: rabbit@$(MY_POD_IP)
        - name: RABBITMQ_ERLANG_COOKIE
          valueFrom:
            secretKeyRef:
              key: rabbitmq_erlang_cookie
              name: {{ include "common.fullname" . }}-secrets
        - name: K8S_SERVICE_NAME
          value: {{ include "common.servicename" . }}-rabbitmq

        image: {{ include "repositoryGenerator.dockerHubRepository" . }}/{{ .Values.image.rabbitmq }}
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        name: {{ include "common.name" . }}-rabbit
        livenessProbe:
          exec:
            command:
            - rabbitmqctl
            - status
          failureThreshold: 3
          initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
          periodSeconds: {{ .Values.liveness.periodSeconds }}
          successThreshold: 1
          timeoutSeconds: 10
        ports:
        - containerPort: {{ .Values.service.rabbitmq.http.internalPort }}
          name: {{ .Values.service.rabbitmq.http.portName }}
          protocol: TCP
        - containerPort: {{ .Values.service.rabbitmq.amqp.internalPort }}
          name: {{ .Values.service.rabbitmq.amqp.portName }}
          protocol: TCP
        readinessProbe:
          exec:
            command:
            - rabbitmqctl
            - status
          failureThreshold: 3
          initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
          periodSeconds: {{ .Values.liveness.periodSeconds }}
          successThreshold: 1
          timeoutSeconds: 10
        resources:
          requests:
            cpu: 500m
            memory: 2Gi
        volumeMounts:
        - mountPath: /etc/rabbitmq
          name: rabbitmq-config

      - image: {{ include "repositoryGenerator.dockerHubRepository" . }}/{{ .Values.image.memcached }}
        imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
        name: {{ include "common.name" . }}-memcached
        resources:
          requests:
            cpu: 500m
            memory: 1Gi
      serviceAccount: {{ include "common.fullname" . }}
      serviceAccountName: {{ include "common.fullname" . }}
      volumes:
      - configMap:
          defaultMode: 420
          items:
          - key: awx_settings
            path: settings.py
          name: {{ include "common.fullname" . }}-settings
        name: awx-application-config
      - name: awx-application-credentials
        secret:
          defaultMode: 420
          items:
          - key: credentials_py
            path: credentials.py
          - key: environment_sh
            path: environment.sh
          secretName: {{ include "common.fullname" . }}-secrets
      - name: awx-secret-key
        secret:
          defaultMode: 420
          items:
          - key: secret_key
            path: SECRET_KEY
          secretName: {{ include "common.fullname" . }}-secrets
      - configMap:
          defaultMode: 420
          items:
          - key: rabbitmq.conf
            path: rabbitmq.conf
          - key: enabled_plugins
            path: enabled_plugins
          - key: rabbitmq_definitions.json
            path: rabbitmq_definitions.json
          name: {{ include "common.fullname" . }}-rabbitmq
        name: rabbitmq-config
      imagePullSecrets:
      - name: "{{ include "common.namespace" . }}-docker-registry-key"