{% for service, variants in iter_celery_workers_config().items() %}
{% for variant, config in variants.items() if variant != 'default' %}
{% set deployment = service + "-" + "worker" + "-" + variant.replace("_", "-") %}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{deployment}}
  labels:
    app.kubernetes.io/name: {{deployment}}
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: {{deployment}}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{deployment}}
    spec:
      securityContext:
        runAsUser: 1000
        runAsGroup: 1000
      containers:
        - name: {{deployment}}
          image: {{ DOCKER_IMAGE_OPENEDX }}
          args:
            - "celery"
            - "--app={{service}}.celery"
            - "worker"
            - "--loglevel=info"
            - "--hostname=edx.{{service}}.core.{{variant}}.%%h"
            - "--max-tasks-per-child=100"
            - "--queues=edx.{{service}}.core.{{variant}}"
            {% for param in config.get("extra_params", []) %}
            - "{{param}}"
            {% endfor %}
          env:
          - name: SERVICE_VARIANT
            value: {{service}}
          - name: DJANGO_SETTINGS_MODULE
            value: {{service}}.envs.tutor.production
          volumeMounts:
            - mountPath: /openedx/edx-platform/{{service}}/envs/tutor/
              name: settings-{{service}}
            - mountPath: /openedx/config
              name: config
          securityContext:
            allowPrivilegeEscalation: false
      volumes:
        - name: settings-{{service}}
          configMap:
            name: openedx-settings-{{service}}
        - name: config
          configMap:
            name: openedx-config
{% endfor %}
{% endfor %}
{% if CELERY_FLOWER -%}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: flower
  labels:
    app.kubernetes.io/name: flower
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: flower
  template:
    metadata:
      labels:
        app.kubernetes.io/name: flower
    spec:
      containers:
        - name: flower
          image: {{CELERY_FLOWER_DOCKER_IMAGE}}
          ports:
            - containerPort: 5555
              name: metrics
          env:
          - name: CELERY_BROKER_URL
            value: redis://{{ REDIS_USERNAME }}:{{ REDIS_PASSWORD }}@{{ REDIS_HOST }}:{{ REDIS_PORT }}/{{ OPENEDX_CELERY_REDIS_DB }}
          - name: FLOWER_PORT
            value: "5555"
          - name: FLOWER_BASIC_AUTH
            value: {{CELERY_FLOWER_BASIC_AUTH}}
{% if CELERY_FLOWER_SERVICE_MONITOR -%}
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app.kubernetes.io/name: flower
    release: prometheus
  name: flower
  namespace: {{ K8S_NAMESPACE }}
spec:
  endpoints:
  - interval: 30s
    port: metrics
    honorLabels: true
    path: /metrics
  namespaceSelector:
    matchNames:
    - {{ K8S_NAMESPACE }}
  selector:
    matchLabels:
      app.kubernetes.io/name: flower
{%- endif %}
{%- endif %}
