---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.name }}-frontend
  namespace: {{ .Release.Namespace }}

spec:
  selector:
    matchLabels:
      app: {{ .Values.name }}
      role: frontend
  {{- if eq (int .Values.frontend_max_replicas) 1 }}
  replicas: 1
  {{- end }}
  template:
    metadata:
      labels:
        app: {{ .Values.name }}
        role: frontend

      annotations:
        # force helm to update the deployment each time
        {{- if not .Values.backend_only }}
        "helm.update": {{ randAlphaNum 5 | quote }}
        {{- end }}


    spec:
      {{- if .Values.main_node_type }}
      nodeSelector:
        nodeType: {{ .Values.main_node_type }}
      {{- end }}

      containers:
        - name: nginx
          image: {{ .Values.frontend_image }}
          imagePullPolicy: {{ .Values.frontend_pull_policy }}
          env:
            - name: BACKEND_HOST
              value: {{ .Values.name }}-backend

            - name: CRAWLER_FQDN_SUFFIX
              value: ".{{ .Values.crawler_namespace }}.svc.cluster.local"

            - name: NGINX_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE
              value: "1"

            - name: RWP_BASE_URL
              value: {{ .Values.rwp_base_url }}

            {{- if .Values.docs_url }}
            - name: DOCS_URL
              value: {{ .Values.docs_url }}
            {{- end }}

            {{- if .Values.minio_local }}
            - name: LOCAL_MINIO_HOST
              value: "{{ .Values.minio_host }}"

            - name: LOCAL_BUCKET
              value: "{{ .Values.minio_local_bucket_name }}"
            {{- end }}

            {{- if .Values.inject_extra }}
            - name: INJECT_EXTRA
              value: {{ .Values.inject_extra }}
            {{- end }}

          resources:
            limits:
              memory: {{ .Values.frontend_memory }}

            requests:
              cpu: {{ .Values.frontend_cpu }}
              memory: {{ .Values.frontend_memory }}

          readinessProbe:
            httpGet:
              path: /healthz
              port: 8880
            failureThreshold: 3
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
---

apiVersion: v1
kind: Service

metadata:
  namespace: {{ .Release.Namespace }}
  name: {{ .Values.name }}-frontend
  labels:
    app: {{ .Values.name }}
    role: frontend

{{- if .Values.service }}
  {{- if .Values.service.annotations }}
  annotations:
  {{- range $key, $val := .Values.service.annotations }}
    {{ $key }}: {{ $val | quote }}
  {{- end }}
  {{- end }}
{{- end }}

spec:
  selector:
    app: {{ .Values.name }}
    role: frontend

  ports:
    - protocol: TCP
      port: 80
      name: frontend

  {{- if and .Values.local_service_port (not .Values.ingress.host) }}
      nodePort: {{ .Values.local_service_port }}

  type: NodePort
  {{- end }}


{{- if gt (int .Values.frontend_max_replicas) 1 }}
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: frontend-autoscaler
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: {{ .Values.name }}-frontend
  minReplicas: 1
  maxReplicas: {{ .Values.frontend_max_replicas }}
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: {{ .Values.frontend_avg_cpu_threshold }}
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: {{ .Values.frontend_avg_memory_threshold }}
{{ end }}
