Ejemplo n.º 1
0
 def get_or_create_pod(self, pod_request_obj: k8s.V1Pod, context):
     if self.reattach_on_restart:
         pod = self.find_pod(self.namespace or pod_request_obj.metadata.namespace, context=context)
         if pod:
             return pod
     self.log.debug("Starting pod:\n%s", yaml.safe_dump(pod_request_obj.to_dict()))
     self.pod_manager.create_pod(pod=pod_request_obj)
     return pod_request_obj
Ejemplo n.º 2
0
    def create_new_pod_for_operator(
            self, labels, launcher) -> Tuple[State, k8s.V1Pod, Optional[str]]:
        """
        Creates a new pod and monitors for duration of task

        :param labels: labels used to track pod
        :param launcher: pod launcher that will manage launching and monitoring pods
        :return:
        """
        self.log.debug(
            "Adding KubernetesPodOperator labels to pod before launch for task %s",
            self.task_id)

        # Merge Pod Identifying labels with labels passed to operator
        self.pod.metadata.labels.update(labels)
        # Add Airflow Version to the label
        # And a label to identify that pod is launched by KubernetesPodOperator
        self.pod.metadata.labels.update({
            'airflow_version':
            airflow_version.replace('+', '-'),
            'kubernetes_pod_operator':
            'True',
        })

        self.log.debug("Starting pod:\n%s", yaml.safe_dump(self.pod.to_dict()))
        final_state = None
        try:
            launcher.start_pod(self.pod,
                               startup_timeout=self.startup_timeout_seconds)
            final_state, remote_pod, result = launcher.monitor_pod(
                pod=self.pod, get_logs=self.get_logs)
        except AirflowException:
            if self.log_events_on_failure:
                for event in launcher.read_pod_events(self.pod).items:
                    self.log.error("Pod Event: %s - %s", event.reason,
                                   event.message)
            raise
        finally:
            if self.is_delete_operator_pod:
                self.log.debug("Deleting pod for task %s", self.task_id)
                launcher.delete_pod(self.pod)
            elif final_state != State.SUCCESS:
                self.patch_already_checked(self.pod)
        return final_state, remote_pod, result