|
| 1 | +from typing import List |
| 2 | +from kubernetes import client as k8s |
| 3 | +from kubernetes_utils.pod_generator import PodGenerator |
| 4 | +from models.celery_custom_resource import CeleryCustomResource |
| 5 | + |
| 6 | + |
| 7 | +class FlowerDeploymentGenerator(object): |
| 8 | + |
| 9 | + def __init__(self, namespace: str, celery_cr: CeleryCustomResource): |
| 10 | + self.namespace = namespace |
| 11 | + self.celery_cr = celery_cr |
| 12 | + |
| 13 | + def get_flower_deployment(self) -> k8s.V1Deployment: |
| 14 | + template = k8s.V1PodTemplateSpec( |
| 15 | + metadata=k8s.V1ObjectMeta( |
| 16 | + labels={"app": f'{self.celery_cr.app_name}-celery-flower'} |
| 17 | + ), |
| 18 | + spec=self.get_flower_pod().spec |
| 19 | + ) |
| 20 | + deployment_spec = k8s.V1DeploymentSpec( |
| 21 | + replicas=self.celery_cr.worker_replicas, |
| 22 | + template=template, |
| 23 | + selector={'matchLabels': {'app': f'{self.celery_cr.app_name}-celery-flower'}} |
| 24 | + ) |
| 25 | + |
| 26 | + return k8s.V1Deployment( |
| 27 | + api_version="apps/v1", |
| 28 | + kind="Deployment", |
| 29 | + metadata=k8s.V1ObjectMeta(name=f'{self.celery_cr.app_name}-celery-flower'), |
| 30 | + spec=deployment_spec |
| 31 | + ) |
| 32 | + |
| 33 | + def get_flower_pod(self) -> k8s.V1Pod: |
| 34 | + return PodGenerator( |
| 35 | + namespace=self.namespace, |
| 36 | + image=self.celery_cr.image, |
| 37 | + image_pull_policy=self.celery_cr.image_pull_policy, |
| 38 | + image_pull_secrets=self.celery_cr.image_pull_secrets, |
| 39 | + name=f"{self.celery_cr.app_name}-celery-flower", |
| 40 | + container_name='flower', |
| 41 | + volume_mounts=self.celery_cr.volume_mounts, |
| 42 | + volumes=self.celery_cr.volumes, |
| 43 | + init_containers=self.celery_cr.init_containers, |
| 44 | + cmds=["flower"], |
| 45 | + envs=self.celery_cr.flower_spec.env, |
| 46 | + args=self.__get_flower_container_args( |
| 47 | + self.celery_cr.celery_app, self.celery_cr.flower_spec.args |
| 48 | + ), |
| 49 | + node_selectors=self.celery_cr.flower_spec.node_selector, |
| 50 | + resources=self.celery_cr.flower_spec.resources.to_dict(), |
| 51 | + readiness_probe=self.celery_cr.readiness_probe, |
| 52 | + liveness_probe=self.celery_cr.liveness_probe |
| 53 | + ).gen_pod() |
| 54 | + |
| 55 | + def get_flower_svc(self) -> k8s.V1Service: |
| 56 | + svc_template = self.celery_cr.flower_spec.service |
| 57 | + metadata = { |
| 58 | + 'name': f'{self.celery_cr.app_name}-celery-flower' |
| 59 | + } |
| 60 | + return k8s.V1Service( |
| 61 | + metadata=metadata, |
| 62 | + spec=svc_template.get('spec') |
| 63 | + ) |
| 64 | + |
| 65 | + def __get_flower_container_args( |
| 66 | + self, celery_app: str, args: List[str] |
| 67 | + ) -> List[str]: |
| 68 | + base_args = [f"--app={celery_app}", "flower"] |
| 69 | + if args: |
| 70 | + base_args.extend(args) |
| 71 | + return base_args |
0 commit comments