apache-airflow-providers-cncf-kubernetes 8.3.3rc1__py3-none-any.whl → 8.3.4rc1__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/__init__.py +1 -1
- airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py +8 -1
- airflow/providers/cncf/kubernetes/get_provider_info.py +2 -1
- airflow/providers/cncf/kubernetes/hooks/kubernetes.py +7 -11
- airflow/providers/cncf/kubernetes/operators/pod.py +12 -1
- airflow/providers/cncf/kubernetes/triggers/pod.py +5 -5
- {apache_airflow_providers_cncf_kubernetes-8.3.3rc1.dist-info → apache_airflow_providers_cncf_kubernetes-8.3.4rc1.dist-info}/METADATA +6 -6
- {apache_airflow_providers_cncf_kubernetes-8.3.3rc1.dist-info → apache_airflow_providers_cncf_kubernetes-8.3.4rc1.dist-info}/RECORD +10 -10
- {apache_airflow_providers_cncf_kubernetes-8.3.3rc1.dist-info → apache_airflow_providers_cncf_kubernetes-8.3.4rc1.dist-info}/WHEEL +0 -0
- {apache_airflow_providers_cncf_kubernetes-8.3.3rc1.dist-info → apache_airflow_providers_cncf_kubernetes-8.3.4rc1.dist-info}/entry_points.txt +0 -0
|
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
|
|
|
29
29
|
|
|
30
30
|
__all__ = ["__version__"]
|
|
31
31
|
|
|
32
|
-
__version__ = "8.3.
|
|
32
|
+
__version__ = "8.3.4"
|
|
33
33
|
|
|
34
34
|
if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
|
|
35
35
|
"2.7.0"
|
|
@@ -472,7 +472,12 @@ class KubernetesExecutor(BaseExecutor):
|
|
|
472
472
|
if self.kube_config.delete_worker_pods:
|
|
473
473
|
if state != TaskInstanceState.FAILED or self.kube_config.delete_worker_pods_on_failure:
|
|
474
474
|
self.kube_scheduler.delete_pod(pod_name=pod_name, namespace=namespace)
|
|
475
|
-
self.log.info(
|
|
475
|
+
self.log.info(
|
|
476
|
+
"Deleted pod associated with the TI %s. Pod name: %s. Namespace: %s",
|
|
477
|
+
key,
|
|
478
|
+
pod_name,
|
|
479
|
+
namespace,
|
|
480
|
+
)
|
|
476
481
|
else:
|
|
477
482
|
self.kube_scheduler.patch_pod_executor_done(pod_name=pod_name, namespace=namespace)
|
|
478
483
|
self.log.info("Patched pod %s in namespace %s to mark it as done", key, namespace)
|
|
@@ -694,6 +699,8 @@ class KubernetesExecutor(BaseExecutor):
|
|
|
694
699
|
)
|
|
695
700
|
except ApiException as e:
|
|
696
701
|
self.log.info("Failed to adopt pod %s. Reason: %s", pod.metadata.name, e)
|
|
702
|
+
continue
|
|
703
|
+
|
|
697
704
|
ti_id = annotations_to_key(pod.metadata.annotations)
|
|
698
705
|
self.running.add(ti_id)
|
|
699
706
|
|
|
@@ -28,8 +28,9 @@ def get_provider_info():
|
|
|
28
28
|
"name": "Kubernetes",
|
|
29
29
|
"description": "`Kubernetes <https://kubernetes.io/>`__\n",
|
|
30
30
|
"state": "ready",
|
|
31
|
-
"source-date-epoch":
|
|
31
|
+
"source-date-epoch": 1722663036,
|
|
32
32
|
"versions": [
|
|
33
|
+
"8.3.4",
|
|
33
34
|
"8.3.3",
|
|
34
35
|
"8.3.2",
|
|
35
36
|
"8.3.1",
|
|
@@ -653,18 +653,19 @@ def _get_bool(val) -> bool | None:
|
|
|
653
653
|
class AsyncKubernetesHook(KubernetesHook):
|
|
654
654
|
"""Hook to use Kubernetes SDK asynchronously."""
|
|
655
655
|
|
|
656
|
-
def __init__(self, *args, **kwargs):
|
|
656
|
+
def __init__(self, config_dict: dict | None = None, *args, **kwargs):
|
|
657
657
|
super().__init__(*args, **kwargs)
|
|
658
|
+
|
|
659
|
+
self.config_dict = config_dict
|
|
658
660
|
self._extras: dict | None = None
|
|
659
661
|
|
|
660
662
|
async def _load_config(self):
|
|
661
663
|
"""Return Kubernetes API session for use with requests."""
|
|
662
664
|
in_cluster = self._coalesce_param(self.in_cluster, await self._get_field("in_cluster"))
|
|
663
665
|
cluster_context = self._coalesce_param(self.cluster_context, await self._get_field("cluster_context"))
|
|
664
|
-
kubeconfig_path = self._coalesce_param(self.config_file, await self._get_field("kube_config_path"))
|
|
665
666
|
kubeconfig = await self._get_field("kube_config")
|
|
666
667
|
|
|
667
|
-
num_selected_configuration = sum(1 for o in [in_cluster, kubeconfig,
|
|
668
|
+
num_selected_configuration = sum(1 for o in [in_cluster, kubeconfig, self.config_dict] if o)
|
|
668
669
|
|
|
669
670
|
if num_selected_configuration > 1:
|
|
670
671
|
raise AirflowException(
|
|
@@ -679,14 +680,9 @@ class AsyncKubernetesHook(KubernetesHook):
|
|
|
679
680
|
async_config.load_incluster_config()
|
|
680
681
|
return async_client.ApiClient()
|
|
681
682
|
|
|
682
|
-
if
|
|
683
|
-
self.log.debug(LOADING_KUBE_CONFIG_FILE_RESOURCE.format("
|
|
684
|
-
self.
|
|
685
|
-
await async_config.load_kube_config(
|
|
686
|
-
config_file=kubeconfig_path,
|
|
687
|
-
client_configuration=self.client_configuration,
|
|
688
|
-
context=cluster_context,
|
|
689
|
-
)
|
|
683
|
+
if self.config_dict:
|
|
684
|
+
self.log.debug(LOADING_KUBE_CONFIG_FILE_RESOURCE.format("config dictionary"))
|
|
685
|
+
await async_config.load_kube_config_from_dict(self.config_dict)
|
|
690
686
|
return async_client.ApiClient()
|
|
691
687
|
|
|
692
688
|
if kubeconfig is not None:
|
|
@@ -22,6 +22,7 @@ import datetime
|
|
|
22
22
|
import json
|
|
23
23
|
import logging
|
|
24
24
|
import math
|
|
25
|
+
import os
|
|
25
26
|
import re
|
|
26
27
|
import shlex
|
|
27
28
|
import string
|
|
@@ -695,8 +696,18 @@ class KubernetesPodOperator(BaseOperator):
|
|
|
695
696
|
ti.xcom_push(key="pod_name", value=self.pod.metadata.name)
|
|
696
697
|
ti.xcom_push(key="pod_namespace", value=self.pod.metadata.namespace)
|
|
697
698
|
|
|
699
|
+
self.convert_config_file_to_dict()
|
|
698
700
|
self.invoke_defer_method()
|
|
699
701
|
|
|
702
|
+
def convert_config_file_to_dict(self):
|
|
703
|
+
"""Convert passed config_file to dict representation."""
|
|
704
|
+
config_file = self.config_file if self.config_file else os.environ.get(KUBE_CONFIG_ENV_VAR)
|
|
705
|
+
if config_file:
|
|
706
|
+
with open(config_file) as f:
|
|
707
|
+
self._config_dict = yaml.safe_load(f)
|
|
708
|
+
else:
|
|
709
|
+
self._config_dict = None
|
|
710
|
+
|
|
700
711
|
def invoke_defer_method(self, last_log_time: DateTime | None = None) -> None:
|
|
701
712
|
"""Redefine triggers which are being used in child classes."""
|
|
702
713
|
trigger_start_time = datetime.datetime.now(tz=datetime.timezone.utc)
|
|
@@ -707,7 +718,7 @@ class KubernetesPodOperator(BaseOperator):
|
|
|
707
718
|
trigger_start_time=trigger_start_time,
|
|
708
719
|
kubernetes_conn_id=self.kubernetes_conn_id,
|
|
709
720
|
cluster_context=self.cluster_context,
|
|
710
|
-
|
|
721
|
+
config_dict=self._config_dict,
|
|
711
722
|
in_cluster=self.in_cluster,
|
|
712
723
|
poll_interval=self.poll_interval,
|
|
713
724
|
get_logs=self.get_logs,
|
|
@@ -61,7 +61,7 @@ class KubernetesPodTrigger(BaseTrigger):
|
|
|
61
61
|
:param kubernetes_conn_id: The :ref:`kubernetes connection id <howto/connection:kubernetes>`
|
|
62
62
|
for the Kubernetes cluster.
|
|
63
63
|
:param cluster_context: Context that points to kubernetes cluster.
|
|
64
|
-
:param
|
|
64
|
+
:param config_dict: Content of kubeconfig file in dict format.
|
|
65
65
|
:param poll_interval: Polling period in seconds to check for the status.
|
|
66
66
|
:param trigger_start_time: time in Datetime format when the trigger was started
|
|
67
67
|
:param in_cluster: run kubernetes client with in_cluster configuration.
|
|
@@ -89,7 +89,7 @@ class KubernetesPodTrigger(BaseTrigger):
|
|
|
89
89
|
kubernetes_conn_id: str | None = None,
|
|
90
90
|
poll_interval: float = 2,
|
|
91
91
|
cluster_context: str | None = None,
|
|
92
|
-
|
|
92
|
+
config_dict: dict | None = None,
|
|
93
93
|
in_cluster: bool | None = None,
|
|
94
94
|
get_logs: bool = True,
|
|
95
95
|
startup_timeout: int = 120,
|
|
@@ -107,7 +107,7 @@ class KubernetesPodTrigger(BaseTrigger):
|
|
|
107
107
|
self.kubernetes_conn_id = kubernetes_conn_id
|
|
108
108
|
self.poll_interval = poll_interval
|
|
109
109
|
self.cluster_context = cluster_context
|
|
110
|
-
self.
|
|
110
|
+
self.config_dict = config_dict
|
|
111
111
|
self.in_cluster = in_cluster
|
|
112
112
|
self.get_logs = get_logs
|
|
113
113
|
self.startup_timeout = startup_timeout
|
|
@@ -142,7 +142,7 @@ class KubernetesPodTrigger(BaseTrigger):
|
|
|
142
142
|
"kubernetes_conn_id": self.kubernetes_conn_id,
|
|
143
143
|
"poll_interval": self.poll_interval,
|
|
144
144
|
"cluster_context": self.cluster_context,
|
|
145
|
-
"
|
|
145
|
+
"config_dict": self.config_dict,
|
|
146
146
|
"in_cluster": self.in_cluster,
|
|
147
147
|
"get_logs": self.get_logs,
|
|
148
148
|
"startup_timeout": self.startup_timeout,
|
|
@@ -282,7 +282,7 @@ class KubernetesPodTrigger(BaseTrigger):
|
|
|
282
282
|
return AsyncKubernetesHook(
|
|
283
283
|
conn_id=self.kubernetes_conn_id,
|
|
284
284
|
in_cluster=self.in_cluster,
|
|
285
|
-
|
|
285
|
+
config_dict=self.config_dict,
|
|
286
286
|
cluster_context=self.cluster_context,
|
|
287
287
|
)
|
|
288
288
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: apache-airflow-providers-cncf-kubernetes
|
|
3
|
-
Version: 8.3.
|
|
3
|
+
Version: 8.3.4rc1
|
|
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>
|
|
@@ -29,8 +29,8 @@ Requires-Dist: google-re2>=1.0
|
|
|
29
29
|
Requires-Dist: kubernetes>=29.0.0,<=30.1.0
|
|
30
30
|
Requires-Dist: kubernetes_asyncio>=29.0.0,<=30.1.0
|
|
31
31
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
|
32
|
-
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.3.
|
|
33
|
-
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.3.
|
|
32
|
+
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.3.4/changelog.html
|
|
33
|
+
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.3.4
|
|
34
34
|
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
|
35
35
|
Project-URL: Source Code, https://github.com/apache/airflow
|
|
36
36
|
Project-URL: Twitter, https://twitter.com/ApacheAirflow
|
|
@@ -80,7 +80,7 @@ Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
|
|
|
80
80
|
|
|
81
81
|
Package ``apache-airflow-providers-cncf-kubernetes``
|
|
82
82
|
|
|
83
|
-
Release: ``8.3.
|
|
83
|
+
Release: ``8.3.4.rc1``
|
|
84
84
|
|
|
85
85
|
|
|
86
86
|
`Kubernetes <https://kubernetes.io/>`__
|
|
@@ -93,7 +93,7 @@ This is a provider package for ``cncf.kubernetes`` provider. All classes for thi
|
|
|
93
93
|
are in ``airflow.providers.cncf.kubernetes`` python package.
|
|
94
94
|
|
|
95
95
|
You can find package information and changelog for the provider
|
|
96
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.3.
|
|
96
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.3.4/>`_.
|
|
97
97
|
|
|
98
98
|
Installation
|
|
99
99
|
------------
|
|
@@ -120,4 +120,4 @@ PIP package Version required
|
|
|
120
120
|
====================== =====================
|
|
121
121
|
|
|
122
122
|
The changelog for the provider package can be found in the
|
|
123
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.3.
|
|
123
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/8.3.4/changelog.html>`_.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
airflow/providers/cncf/kubernetes/LICENSE,sha256=FFb4jd2AXnOOf7XLP04pQW6jbdhG49TxlGY6fFpCV1Y,13609
|
|
2
|
-
airflow/providers/cncf/kubernetes/__init__.py,sha256=
|
|
2
|
+
airflow/providers/cncf/kubernetes/__init__.py,sha256=7z6waU5DNh8bD8MEil1ucN-MKVAK9R-gdo1uL-Q-ODI,1502
|
|
3
3
|
airflow/providers/cncf/kubernetes/callbacks.py,sha256=SK_gKvGWuU-nxHfsqsYMlNQ8HZbHfpvyItOqieel2lc,4162
|
|
4
|
-
airflow/providers/cncf/kubernetes/get_provider_info.py,sha256=
|
|
4
|
+
airflow/providers/cncf/kubernetes/get_provider_info.py,sha256=UmbAM_TNNsUc72fWriiMAQ0Yq10Ydpa2vosJ4oQphYg,17881
|
|
5
5
|
airflow/providers/cncf/kubernetes/k8s_model.py,sha256=xmdFhX29DjegoZ-cq8-KDL9soVYXf4OpU6fAGr3cPTU,2101
|
|
6
6
|
airflow/providers/cncf/kubernetes/kube_client.py,sha256=yflZxLousXA9d7t67KrEy55qzb1cUhEyy6yCPkEem28,5329
|
|
7
7
|
airflow/providers/cncf/kubernetes/kube_config.py,sha256=FAmhZZ_Z2JtoVzL6wENSjcwrlwAenHttTX_Ild9aEms,5225
|
|
@@ -20,19 +20,19 @@ airflow/providers/cncf/kubernetes/cli/kubernetes_command.py,sha256=W49hsWZ3XWUJg
|
|
|
20
20
|
airflow/providers/cncf/kubernetes/decorators/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
21
21
|
airflow/providers/cncf/kubernetes/decorators/kubernetes.py,sha256=qfU_MDOhBsHc2leu1RW3YE5steDFOnWxcVswhjC6GXU,5785
|
|
22
22
|
airflow/providers/cncf/kubernetes/executors/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
23
|
-
airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py,sha256=
|
|
23
|
+
airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py,sha256=jxqAiChuAwAts-WuzMv8s7aP7wS46n8tAG_PiM3YDKQ,33841
|
|
24
24
|
airflow/providers/cncf/kubernetes/executors/kubernetes_executor_types.py,sha256=9rRhfRuujGtSE73Ax0kC12whZCgWF2m6j5w9G9e0F_I,1673
|
|
25
25
|
airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py,sha256=RtSHNyV8Hu4QLvMXLJJaanEfJWlZK2n6Ic2adg18oBE,23694
|
|
26
26
|
airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py,sha256=r5cvhj9NUTreQScn3Y8NlPFoYIa_NaAVQ27WqtOrJvw,10014
|
|
27
27
|
airflow/providers/cncf/kubernetes/hooks/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
28
|
-
airflow/providers/cncf/kubernetes/hooks/kubernetes.py,sha256=
|
|
28
|
+
airflow/providers/cncf/kubernetes/hooks/kubernetes.py,sha256=Ro_RJpNw7-NdM-wTydU-N1hz8qwXEVGP1tiaXIBsazw,31765
|
|
29
29
|
airflow/providers/cncf/kubernetes/kubernetes_executor_templates/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
30
30
|
airflow/providers/cncf/kubernetes/kubernetes_executor_templates/basic_template.yaml,sha256=yzJmXN4ZyB4aDwI_GIugpL9-f1YMVy__X-LQSbeU95A,2567
|
|
31
31
|
airflow/providers/cncf/kubernetes/operators/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
32
32
|
airflow/providers/cncf/kubernetes/operators/custom_object_launcher.py,sha256=ZEXw_PqGItO47AEgGKqAqwFHFo-gb9-7jgEMRJgOfNU,15311
|
|
33
33
|
airflow/providers/cncf/kubernetes/operators/job.py,sha256=qbhaytWCoi2XdkWZnDFfFPOt1CsNDk7wyrCWtn1nxlk,21432
|
|
34
34
|
airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py,sha256=EFwHEdEqq4I18BeV9hgp_GFxrLI78ihZAccbyGLSjtY,1269
|
|
35
|
-
airflow/providers/cncf/kubernetes/operators/pod.py,sha256=
|
|
35
|
+
airflow/providers/cncf/kubernetes/operators/pod.py,sha256=q5jCOstOpnilyacLE6J7EGleuzUTvMlZpa_ztfzF13A,54460
|
|
36
36
|
airflow/providers/cncf/kubernetes/operators/resource.py,sha256=ccbZQKB1B5N4Y-ruItacB5Q105Tc0uNSoEmUAaSCrGQ,7570
|
|
37
37
|
airflow/providers/cncf/kubernetes/operators/spark_kubernetes.py,sha256=xHuxlcGeMg3afAHEW1JSU9oTdJJ_p07EiqUdA4oxJuU,13262
|
|
38
38
|
airflow/providers/cncf/kubernetes/pod_template_file_examples/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
@@ -48,13 +48,13 @@ airflow/providers/cncf/kubernetes/sensors/spark_kubernetes.py,sha256=AFml2CgXTV1
|
|
|
48
48
|
airflow/providers/cncf/kubernetes/triggers/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
|
49
49
|
airflow/providers/cncf/kubernetes/triggers/job.py,sha256=kNxPW19yV6TcrXe6Xio_g38YneBGvAiMuHV43-nsUds,4060
|
|
50
50
|
airflow/providers/cncf/kubernetes/triggers/kubernetes_pod.py,sha256=Cfq-gmdXsW2QGFiX-EYAGsCpN_MDvofbfr3bK7QfQho,1266
|
|
51
|
-
airflow/providers/cncf/kubernetes/triggers/pod.py,sha256=
|
|
51
|
+
airflow/providers/cncf/kubernetes/triggers/pod.py,sha256=4L5ZXswM11kAwAietMcfwPuelA8CJ12Jgo40Lndsquc,13629
|
|
52
52
|
airflow/providers/cncf/kubernetes/utils/__init__.py,sha256=ClZN0VPjWySdVwS_ktH7rrgL9VLAcs3OSJSB9s3zaYw,863
|
|
53
53
|
airflow/providers/cncf/kubernetes/utils/delete_from.py,sha256=poObZSoEJwQyaYWilEURs8f4CDY2sn_pfwS31Lf579A,5195
|
|
54
54
|
airflow/providers/cncf/kubernetes/utils/k8s_resource_iterator.py,sha256=-Pgc5i2WEDl7ZBvtJZ4eWDqqlSj8WdULqwUyOWmsRp8,1928
|
|
55
55
|
airflow/providers/cncf/kubernetes/utils/pod_manager.py,sha256=g4JZpRJONuWFLdSlc7VyBtDGoST7H4W9LAt2nqNtDpg,33669
|
|
56
56
|
airflow/providers/cncf/kubernetes/utils/xcom_sidecar.py,sha256=k6bdmVJ21OrAwGmWwledRrAmaty9ZrmbuM-IbaI4mqo,2519
|
|
57
|
-
apache_airflow_providers_cncf_kubernetes-8.3.
|
|
58
|
-
apache_airflow_providers_cncf_kubernetes-8.3.
|
|
59
|
-
apache_airflow_providers_cncf_kubernetes-8.3.
|
|
60
|
-
apache_airflow_providers_cncf_kubernetes-8.3.
|
|
57
|
+
apache_airflow_providers_cncf_kubernetes-8.3.4rc1.dist-info/entry_points.txt,sha256=ByD3QJJyP9CfmTYtpNI1953akD38RUDgpGXLaq9vpOw,111
|
|
58
|
+
apache_airflow_providers_cncf_kubernetes-8.3.4rc1.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
|
59
|
+
apache_airflow_providers_cncf_kubernetes-8.3.4rc1.dist-info/METADATA,sha256=hv0tfRuUx4pH_pKdURcwSzMECpz7wjXcAhEcM2eRcbk,5270
|
|
60
|
+
apache_airflow_providers_cncf_kubernetes-8.3.4rc1.dist-info/RECORD,,
|
|
File without changes
|