apache-airflow-providers-cncf-kubernetes 10.5.0rc1__py3-none-any.whl → 10.5.0rc2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py +2 -3
- airflow/providers/cncf/kubernetes/operators/pod.py +1 -1
- airflow/providers/cncf/kubernetes/pod_generator.py +2 -36
- airflow/providers/cncf/kubernetes/template_rendering.py +17 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1.dist-info → apache_airflow_providers_cncf_kubernetes-10.5.0rc2.dist-info}/METADATA +1 -1
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1.dist-info → apache_airflow_providers_cncf_kubernetes-10.5.0rc2.dist-info}/RECORD +8 -8
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1.dist-info → apache_airflow_providers_cncf_kubernetes-10.5.0rc2.dist-info}/WHEEL +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1.dist-info → apache_airflow_providers_cncf_kubernetes-10.5.0rc2.dist-info}/entry_points.txt +0 -0
|
@@ -398,8 +398,8 @@ class AirflowKubernetesScheduler(LoggingMixin):
|
|
|
398
398
|
"python",
|
|
399
399
|
"-m",
|
|
400
400
|
"airflow.sdk.execution_time.execute_workload",
|
|
401
|
-
"--json-
|
|
402
|
-
|
|
401
|
+
"--json-string",
|
|
402
|
+
ser_input,
|
|
403
403
|
]
|
|
404
404
|
else:
|
|
405
405
|
raise ValueError(
|
|
@@ -427,7 +427,6 @@ class AirflowKubernetesScheduler(LoggingMixin):
|
|
|
427
427
|
date=None,
|
|
428
428
|
run_id=run_id,
|
|
429
429
|
args=list(command),
|
|
430
|
-
content_json_for_volume=ser_input,
|
|
431
430
|
pod_override_object=kube_executor_config,
|
|
432
431
|
base_worker_pod=base_worker_pod,
|
|
433
432
|
with_mutation_hook=True,
|
|
@@ -305,7 +305,7 @@ class KubernetesPodOperator(BaseOperator):
|
|
|
305
305
|
node_selector: dict | None = None,
|
|
306
306
|
image_pull_secrets: list[k8s.V1LocalObjectReference] | None = None,
|
|
307
307
|
service_account_name: str | None = None,
|
|
308
|
-
automount_service_account_token: bool =
|
|
308
|
+
automount_service_account_token: bool | None = None,
|
|
309
309
|
hostnetwork: bool = False,
|
|
310
310
|
host_aliases: list[k8s.V1HostAlias] | None = None,
|
|
311
311
|
tolerations: list[k8s.V1Toleration] | None = None,
|
|
@@ -34,7 +34,7 @@ from functools import reduce
|
|
|
34
34
|
from typing import TYPE_CHECKING
|
|
35
35
|
|
|
36
36
|
from dateutil import parser
|
|
37
|
-
from kubernetes.client import
|
|
37
|
+
from kubernetes.client import models as k8s
|
|
38
38
|
from kubernetes.client.api_client import ApiClient
|
|
39
39
|
|
|
40
40
|
from airflow.exceptions import (
|
|
@@ -287,7 +287,6 @@ class PodGenerator:
|
|
|
287
287
|
scheduler_job_id: str,
|
|
288
288
|
run_id: str | None = None,
|
|
289
289
|
map_index: int = -1,
|
|
290
|
-
content_json_for_volume: str = "",
|
|
291
290
|
*,
|
|
292
291
|
with_mutation_hook: bool = False,
|
|
293
292
|
) -> k8s.V1Pod:
|
|
@@ -355,39 +354,6 @@ class PodGenerator:
|
|
|
355
354
|
containers=[main_container],
|
|
356
355
|
)
|
|
357
356
|
|
|
358
|
-
if content_json_for_volume:
|
|
359
|
-
import shlex
|
|
360
|
-
|
|
361
|
-
input_file_path = "/tmp/execute/input.json"
|
|
362
|
-
execute_volume = V1Volume(
|
|
363
|
-
name="execute-volume",
|
|
364
|
-
empty_dir=V1EmptyDirVolumeSource(),
|
|
365
|
-
)
|
|
366
|
-
|
|
367
|
-
execute_volume_mount = V1VolumeMount(
|
|
368
|
-
name="execute-volume",
|
|
369
|
-
mount_path="/tmp/execute",
|
|
370
|
-
read_only=False,
|
|
371
|
-
)
|
|
372
|
-
|
|
373
|
-
escaped_json = shlex.quote(content_json_for_volume)
|
|
374
|
-
init_container = k8s.V1Container(
|
|
375
|
-
name="init-container",
|
|
376
|
-
image="busybox",
|
|
377
|
-
command=["/bin/sh", "-c", f"echo {escaped_json} > {input_file_path}"],
|
|
378
|
-
volume_mounts=[execute_volume_mount],
|
|
379
|
-
)
|
|
380
|
-
|
|
381
|
-
main_container.volume_mounts = [execute_volume_mount]
|
|
382
|
-
main_container.command = args[:-1]
|
|
383
|
-
main_container.args = args[-1:]
|
|
384
|
-
|
|
385
|
-
podspec = k8s.V1PodSpec(
|
|
386
|
-
containers=[main_container],
|
|
387
|
-
volumes=[execute_volume],
|
|
388
|
-
init_containers=[init_container],
|
|
389
|
-
)
|
|
390
|
-
|
|
391
357
|
dynamic_pod.spec = podspec
|
|
392
358
|
|
|
393
359
|
# Reconcile the pods starting with the first chronologically,
|
|
@@ -546,7 +512,7 @@ def merge_objects(base_obj, client_obj):
|
|
|
546
512
|
|
|
547
513
|
for base_key in base_obj.to_dict():
|
|
548
514
|
base_val = getattr(base_obj, base_key, None)
|
|
549
|
-
if not getattr(client_obj, base_key, None) and base_val:
|
|
515
|
+
if not getattr(client_obj, base_key, None) and base_val is not None:
|
|
550
516
|
if not isinstance(client_obj_cp, dict):
|
|
551
517
|
setattr(client_obj_cp, base_key, base_val)
|
|
552
518
|
else:
|
|
@@ -19,11 +19,14 @@ from __future__ import annotations
|
|
|
19
19
|
|
|
20
20
|
from typing import TYPE_CHECKING
|
|
21
21
|
|
|
22
|
+
from jinja2 import TemplateAssertionError, UndefinedError
|
|
22
23
|
from kubernetes.client.api_client import ApiClient
|
|
23
24
|
|
|
25
|
+
from airflow.exceptions import AirflowException
|
|
24
26
|
from airflow.providers.cncf.kubernetes.kube_config import KubeConfig
|
|
25
27
|
from airflow.providers.cncf.kubernetes.kubernetes_helper_functions import create_unique_id
|
|
26
28
|
from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator
|
|
29
|
+
from airflow.utils.session import NEW_SESSION, provide_session
|
|
27
30
|
|
|
28
31
|
if TYPE_CHECKING:
|
|
29
32
|
from airflow.models.taskinstance import TaskInstance
|
|
@@ -58,3 +61,17 @@ def render_k8s_pod_yaml(task_instance: TaskInstance) -> dict | None:
|
|
|
58
61
|
)
|
|
59
62
|
sanitized_pod = ApiClient().sanitize_for_serialization(pod)
|
|
60
63
|
return sanitized_pod
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@provide_session
|
|
67
|
+
def get_rendered_k8s_spec(task_instance: TaskInstance, session=NEW_SESSION) -> dict | None:
|
|
68
|
+
"""Fetch rendered template fields from DB."""
|
|
69
|
+
from airflow.models.renderedtifields import RenderedTaskInstanceFields
|
|
70
|
+
|
|
71
|
+
rendered_k8s_spec = RenderedTaskInstanceFields.get_k8s_pod_yaml(task_instance, session=session)
|
|
72
|
+
if not rendered_k8s_spec:
|
|
73
|
+
try:
|
|
74
|
+
rendered_k8s_spec = render_k8s_pod_yaml(task_instance)
|
|
75
|
+
except (TemplateAssertionError, UndefinedError) as e:
|
|
76
|
+
raise AirflowException(f"Unable to render a k8s spec for this taskinstance: {e}") from e
|
|
77
|
+
return rendered_k8s_spec
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apache-airflow-providers-cncf-kubernetes
|
|
3
|
-
Version: 10.5.
|
|
3
|
+
Version: 10.5.0rc2
|
|
4
4
|
Summary: Provider package apache-airflow-providers-cncf-kubernetes for Apache Airflow
|
|
5
5
|
Keywords: airflow-provider,cncf.kubernetes,airflow,integration
|
|
6
6
|
Author-email: Apache Software Foundation <dev@airflow.apache.org>
|
|
@@ -7,11 +7,11 @@ airflow/providers/cncf/kubernetes/k8s_model.py,sha256=xmdFhX29DjegoZ-cq8-KDL9soV
|
|
|
7
7
|
airflow/providers/cncf/kubernetes/kube_client.py,sha256=yflZxLousXA9d7t67KrEy55qzb1cUhEyy6yCPkEem28,5329
|
|
8
8
|
airflow/providers/cncf/kubernetes/kube_config.py,sha256=3qWdCp2z4g8gX_sIOProgwp52UxM5kAIYabkxaX297g,5079
|
|
9
9
|
airflow/providers/cncf/kubernetes/kubernetes_helper_functions.py,sha256=opxof6wxHEAHwa_zRB47QJBBrV5St4rIZzAiptA9Rek,5510
|
|
10
|
-
airflow/providers/cncf/kubernetes/pod_generator.py,sha256=
|
|
10
|
+
airflow/providers/cncf/kubernetes/pod_generator.py,sha256=TFlNkn3PCytjxnhQduOxNAVdFjwne9-PupV6Gfun5A4,19649
|
|
11
11
|
airflow/providers/cncf/kubernetes/python_kubernetes_script.jinja2,sha256=I0EHRGwLHjSiX85e51HBIoddRDnC8TJPFrDBqQq_NJg,1776
|
|
12
12
|
airflow/providers/cncf/kubernetes/python_kubernetes_script.py,sha256=KnTlZSWCZhwvj89fSc2kgIRTaI4iLNKPquHc2wXnluo,3460
|
|
13
13
|
airflow/providers/cncf/kubernetes/secret.py,sha256=wj-T9gouqau_X14slAstGmnSxqXJQzdLwUdURzHna0I,5209
|
|
14
|
-
airflow/providers/cncf/kubernetes/template_rendering.py,sha256=
|
|
14
|
+
airflow/providers/cncf/kubernetes/template_rendering.py,sha256=pV6lX8DW3dLNB945mxwM8E0Vynis2-chMCwHlnHeIVY,3490
|
|
15
15
|
airflow/providers/cncf/kubernetes/version_compat.py,sha256=j5PCtXvZ71aBjixu-EFTNtVDPsngzzs7os0ZQDgFVDk,1536
|
|
16
16
|
airflow/providers/cncf/kubernetes/backcompat/__init__.py,sha256=KXF76f3v1jIFUBNz8kwxVMvm7i4mNo35LbIG9IijBNc,1299
|
|
17
17
|
airflow/providers/cncf/kubernetes/backcompat/backwards_compat_converters.py,sha256=FkRRtIEucp2hYrecGVYVgyPI6-b7hE7X7L17Z3r459Y,4303
|
|
@@ -23,7 +23,7 @@ airflow/providers/cncf/kubernetes/decorators/kubernetes_cmd.py,sha256=Rsak_cPl_-
|
|
|
23
23
|
airflow/providers/cncf/kubernetes/executors/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
24
24
|
airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py,sha256=TomXdMCdtnnsKOWZiNR2lrh0ZmHghfbzXjpjeRDJTFA,31976
|
|
25
25
|
airflow/providers/cncf/kubernetes/executors/kubernetes_executor_types.py,sha256=L8_8HOHd_4O8WW6xT2tp49-yOj0EMKCYK5YqMOOx_bI,1973
|
|
26
|
-
airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py,sha256=
|
|
26
|
+
airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py,sha256=U2mCkPy-MnPLLdPHil5_rLOsb-K_Xnn5YwNUVzD96i4,24689
|
|
27
27
|
airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py,sha256=TuFRbs1zqKajJoZmo25kT4AGd-_-iD-UbhfOY30EOck,11591
|
|
28
28
|
airflow/providers/cncf/kubernetes/hooks/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
29
29
|
airflow/providers/cncf/kubernetes/hooks/kubernetes.py,sha256=KPv5t7Xpvx9Nw9uampf1VCMdnq_ySqRzFbt07NKIjZY,37107
|
|
@@ -33,7 +33,7 @@ airflow/providers/cncf/kubernetes/operators/__init__.py,sha256=mlJxuZLkd5x-iq2SB
|
|
|
33
33
|
airflow/providers/cncf/kubernetes/operators/custom_object_launcher.py,sha256=jTVHQt1vp5gELrLNyM-DrZ1ywgmTy3Hh1i6wyl7AGS0,15314
|
|
34
34
|
airflow/providers/cncf/kubernetes/operators/job.py,sha256=aK2MogooZ6K7uVC0hWRYhCGgzwHOERrgPyknWu5mp7c,23771
|
|
35
35
|
airflow/providers/cncf/kubernetes/operators/kueue.py,sha256=eEfl__06k15-21Y86qHOLAsY2zR1OWM4QgQhDteDBP0,4563
|
|
36
|
-
airflow/providers/cncf/kubernetes/operators/pod.py,sha256=
|
|
36
|
+
airflow/providers/cncf/kubernetes/operators/pod.py,sha256=yO4gz_9cHYAn-7mjJKEu3KUf_7nxtUvaEAaL7NQ92nc,58639
|
|
37
37
|
airflow/providers/cncf/kubernetes/operators/resource.py,sha256=Q5WssuDyjtzo1Op1pzUmYG4JZZdzCKTe-vTZEy8HSNA,7579
|
|
38
38
|
airflow/providers/cncf/kubernetes/operators/spark_kubernetes.py,sha256=0TO86G-gbWAkQvaWBfhCp6ZJwoQzciH-UGR5kgw9fmg,13847
|
|
39
39
|
airflow/providers/cncf/kubernetes/pod_template_file_examples/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
@@ -54,7 +54,7 @@ airflow/providers/cncf/kubernetes/utils/delete_from.py,sha256=poObZSoEJwQyaYWilE
|
|
|
54
54
|
airflow/providers/cncf/kubernetes/utils/k8s_resource_iterator.py,sha256=DLypjkD_3YDixRTcsxEjgvHZNbbG9qamlz05eBqaWzU,1955
|
|
55
55
|
airflow/providers/cncf/kubernetes/utils/pod_manager.py,sha256=8edX-K9t2YgGHYsEeqUmKodHv4jsEHdPjii89KlE0dw,39436
|
|
56
56
|
airflow/providers/cncf/kubernetes/utils/xcom_sidecar.py,sha256=k6bdmVJ21OrAwGmWwledRrAmaty9ZrmbuM-IbaI4mqo,2519
|
|
57
|
-
apache_airflow_providers_cncf_kubernetes-10.5.
|
|
58
|
-
apache_airflow_providers_cncf_kubernetes-10.5.
|
|
59
|
-
apache_airflow_providers_cncf_kubernetes-10.5.
|
|
60
|
-
apache_airflow_providers_cncf_kubernetes-10.5.
|
|
57
|
+
apache_airflow_providers_cncf_kubernetes-10.5.0rc2.dist-info/entry_points.txt,sha256=ByD3QJJyP9CfmTYtpNI1953akD38RUDgpGXLaq9vpOw,111
|
|
58
|
+
apache_airflow_providers_cncf_kubernetes-10.5.0rc2.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
59
|
+
apache_airflow_providers_cncf_kubernetes-10.5.0rc2.dist-info/METADATA,sha256=8_LmnQyGyRNNoRJrOpvgi8vL4UGBr6ta5KTkZW-SEBk,4328
|
|
60
|
+
apache_airflow_providers_cncf_kubernetes-10.5.0rc2.dist-info/RECORD,,
|
|
File without changes
|