Exemple #1
0
 def __init__(self, kube_client=None, in_cluster=True, cluster_context=None,
              extract_xcom=False):
     super(PodLauncher, self).__init__()
     self._client = kube_client or get_kube_client(in_cluster=in_cluster,
                                                   cluster_context=cluster_context)
     self._watch = watch.Watch()
     self.extract_xcom = extract_xcom
     self.kube_req_factory = pod_factory.ExtractXcomPodRequestFactory(
     ) if extract_xcom else pod_factory.SimplePodRequestFactory()
Exemple #2
0
 def __init__(self,
              kube_client=None,
              in_cluster=True,
              cluster_context=None):
     super(PodLauncher, self).__init__()
     self._client = kube_client or get_kube_client(
         in_cluster=in_cluster, cluster_context=cluster_context)
     self._watch = watch.Watch()
     self.kube_req_factory = pod_fac.SimplePodRequestFactory()
Exemple #3
0
    def __init__(self,
                 kube_client=None,
                 in_cluster=True,
                 cluster_context=None,
                 extract_xcom=False):
        """
        Creates the launcher.

        :param kube_client: kubernetes client
        :param in_cluster: whether we are in cluster
        :param cluster_context: context of the cluster
        :param extract_xcom: whether we should extract xcom
        """
        super(PodLauncher, self).__init__()
        self._client = kube_client or get_kube_client(
            in_cluster=in_cluster, cluster_context=cluster_context)
        self._watch = watch.Watch()
        self.extract_xcom = extract_xcom
        self.kube_req_factory = pod_factory.ExtractXcomPodRequestFactory(
        ) if extract_xcom else pod_factory.SimplePodRequestFactory()
Exemple #4
0
 def __init__(self, kube_client=None):
     super(PodLauncher, self).__init__()
     self._client = kube_client or get_kube_client()
     self._watch = watch.Watch()
     self.kube_req_factory = pod_fac.SimplePodRequestFactory()
Exemple #5
0
    def prepare_and_update_body(self):
        # call to prepare the raw body.
        super().prepare_and_update_body()

        pod_body = None
        if pod_generator is not None:
            # old pod generator
            gen = pod_generator.PodGenerator()

            for port in self.ports:
                gen.add_port(port)
            for mount in self.volume_mounts:
                gen.add_mount(mount)
            for volume in self.volumes:
                gen.add_volume(volume)

            job_obj = self.job_runner.body[0]

            # selecting appropriate pod values.
            all_labels = {}
            all_labels.update(self.labels)
            all_labels.update(job_obj["spec"]["template"]["metadata"].get(
                "labels", {}))
            image = self.image or job_obj["spec"]["template"]["spec"][
                "containers"][0].get("image", None)
            cmds = self.command or job_obj["spec"]["template"]["spec"][
                "containers"][0].get("command", [])
            arguments = self.arguments or job_obj["spec"]["template"]["spec"][
                "containers"][0].get("args", [])

            pod = gen.make_pod(
                namespace=job_obj["metadata"]["namespace"],
                image=image,
                pod_id=job_obj["metadata"]["name"],
                cmds=cmds,
                arguments=arguments,
                labels=all_labels,
            )

            pod.service_account_name = self.service_account_name
            pod.secrets = self.secrets
            pod.envs = self.envs
            pod.image_pull_policy = self.image_pull_policy
            pod.image_pull_secrets = self.image_pull_secrets
            pod.annotations = self.annotations
            pod.resources = self.resources
            pod.affinity = self.affinity
            pod.node_selectors = self.node_selectors
            pod.hostnetwork = self.hostnetwork
            pod.tolerations = self.tolerations
            pod.configmaps = self.configmaps
            pod.security_context = self.security_context
            pod.pod_runtime_info_envs = self.pod_runtime_info_envs
            pod.dnspolicy = self.dnspolicy

            # old pod generation.. moving to new one
            pod_body = pod_request_factory.SimplePodRequestFactory().create(
                pod)
        else:
            pod_body = k8s.V1Pod(
                api_version="v1",
                kind="Pod",
                metadata=k8s.V1ObjectMeta(
                    namespace=self.namespace,
                    labels=self.labels,
                    name="legacy",
                    annotations=self.annotations,
                ),
                spec=k8s.V1PodSpec(
                    node_selector=self.node_selectors,
                    affinity=self.affinity,
                    tolerations=self.tolerations,
                    init_containers=self.init_containers,
                    containers=[
                        k8s.V1Container(
                            image=self.image,
                            name="main",
                            command=self.command,
                            ports=self.ports,
                            resources=self.resources,
                            volume_mounts=self.volume_mounts,
                            args=self.arguments,
                            env=None if self.envs is None else
                            self._get_kubernetes_env_list(),
                            env_from=self.env_from,
                        )
                    ],
                    image_pull_secrets=self.image_pull_secrets,
                    service_account_name=self.service_account_name,
                    host_network=self.hostnetwork,
                    security_context=self.security_context,
                    dns_policy=self.dnspolicy,
                    scheduler_name=self.schedulername,
                    restart_policy="Never",
                    priority_class_name=self.priority_class_name,
                    volumes=self.volumes,
                ),
            )
            pod_body = {
                "metadata":
                self.job_runner.client.api_client.sanitize_for_serialization(
                    pod_body.metadata),
                "spec":
                self.job_runner.client.api_client.sanitize_for_serialization(
                    pod_body.spec),
            }

        # reset the name
        del pod_body["metadata"]["name"]
        pod_body["metadata"].update(
            self.job_runner.body[0]["spec"]["template"]["metadata"])
        self.job_runner.body[0]["spec"]["template"] = pod_body