apache-airflow-providers-cncf-kubernetes 10.4.2rc1__tar.gz → 10.4.3__tar.gz
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.
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/PKG-INFO +7 -7
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/README.rst +3 -3
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/changelog.rst +17 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/commits.rst +16 -1
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/index.rst +1 -1
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/provider.yaml +2 -1
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/pyproject.toml +4 -4
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/__init__.py +1 -1
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/backcompat/backwards_compat_converters.py +5 -8
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/cli/kubernetes_command.py +4 -1
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py +12 -3
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py +3 -6
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/hooks/kubernetes.py +5 -7
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/kubernetes_helper_functions.py +1 -2
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/operators/custom_object_launcher.py +2 -3
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/operators/job.py +1 -1
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/operators/kueue.py +1 -1
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/operators/pod.py +2 -2
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/operators/resource.py +1 -2
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/operators/spark_kubernetes.py +1 -1
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/pod_generator.py +5 -6
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/resource_convert/env_variable.py +1 -1
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/sensors/spark_kubernetes.py +3 -4
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/template_rendering.py +0 -17
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/triggers/pod.py +2 -3
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/utils/pod_manager.py +8 -9
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/conftest.py +1 -1
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/test_template_rendering.py +2 -30
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/.latest-doc-only-change.txt +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/cli-ref.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/conf.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/configurations-ref.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/connections/kubernetes.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/img/arch-diag-kubernetes.png +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/img/arch-diag-kubernetes2.png +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/img/k8s-failed-pod.png +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/img/k8s-happy-path.png +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/installing-providers-from-sources.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/integration-logos/Kubernetes.png +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/integration-logos/Spark-On-Kubernetes.png +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/kubernetes_executor.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/local_kubernetes_executor.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/operators.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/redirects.txt +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/docs/security.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/LICENSE +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/backcompat/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/callbacks.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/cli/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/decorators/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/decorators/kubernetes.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/exceptions.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/executors/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_types.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/get_provider_info.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/hooks/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/k8s_model.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/kube_client.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/kube_config.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/kubernetes_executor_templates/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/kubernetes_executor_templates/basic_template.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/operators/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_image_template.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_volume_template.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/git_sync_template.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/python_kubernetes_script.jinja2 +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/python_kubernetes_script.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/resource_convert/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/resource_convert/configmap.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/resource_convert/secret.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/secret.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/sensors/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/triggers/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/triggers/job.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/utils/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/utils/delete_from.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/utils/k8s_resource_iterator.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/utils/xcom_sidecar.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/src/airflow/providers/cncf/kubernetes/version_compat.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/conftest.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/system/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/system/cncf/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/system/cncf/kubernetes/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/system/cncf/kubernetes/example_kubernetes.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/system/cncf/kubernetes/example_kubernetes_async.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/system/cncf/kubernetes/example_kubernetes_decorator.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/system/cncf/kubernetes/example_kubernetes_job.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/system/cncf/kubernetes/example_kubernetes_kueue.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/system/cncf/kubernetes/example_kubernetes_resource.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/system/cncf/kubernetes/example_spark_kubernetes.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/system/cncf/kubernetes/example_spark_kubernetes_spark_pi.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/system/cncf/kubernetes/spark_job_template.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/backcompat/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/backcompat/test_backwards_compat_converters.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/cli/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/cli/test_kubernetes_command.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/executor/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/executor/basic_template.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/kube_config +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/pods/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/pods/generator_base.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/pods/generator_base_with_secrets.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/pods/template.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/spark/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/spark/application_template.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/spark/application_test.json +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/spark/application_test.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/spark/application_test_with_no_name_from_config.json +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/data_files/spark/application_test_with_no_name_from_config.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/decorators/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/executors/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/executors/test_local_kubernetes_executor.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/hooks/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/log_handlers/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/log_handlers/test_log_handlers.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/models/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/models/test_secret.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/operators/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/operators/test_custom_object_launcher.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/operators/test_job.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/operators/test_kueue.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/operators/test_pod.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/operators/test_resource.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/resource_convert/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/resource_convert/test_configmap.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/resource_convert/test_env_variable.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/resource_convert/test_secret.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/sensors/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/sensors/test_spark_kubernetes.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/test_callbacks.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/test_client.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/test_kubernetes_helper_functions.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/test_pod_generator.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/triggers/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/triggers/test_job.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/triggers/test_pod.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/utils/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/utils/test_k8s_resource_iterator.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.4.2rc1 → apache_airflow_providers_cncf_kubernetes-10.4.3}/tests/unit/cncf/kubernetes/utils/test_pod_manager.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apache-airflow-providers-cncf-kubernetes
|
|
3
|
-
Version: 10.4.
|
|
3
|
+
Version: 10.4.3
|
|
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>
|
|
@@ -21,14 +21,14 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
22
22
|
Classifier: Topic :: System :: Monitoring
|
|
23
23
|
Requires-Dist: aiofiles>=23.2.0
|
|
24
|
-
Requires-Dist: apache-airflow>=2.9.
|
|
24
|
+
Requires-Dist: apache-airflow>=2.9.0
|
|
25
25
|
Requires-Dist: asgiref>=3.5.2
|
|
26
26
|
Requires-Dist: cryptography>=41.0.0
|
|
27
27
|
Requires-Dist: kubernetes>=29.0.0,<=31.0.0
|
|
28
28
|
Requires-Dist: kubernetes_asyncio>=29.0.0,<=31.0.0
|
|
29
29
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
|
30
|
-
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.
|
|
31
|
-
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.
|
|
30
|
+
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.3/changelog.html
|
|
31
|
+
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.3
|
|
32
32
|
Project-URL: Mastodon, https://fosstodon.org/@airflow
|
|
33
33
|
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
|
34
34
|
Project-URL: Source Code, https://github.com/apache/airflow
|
|
@@ -59,7 +59,7 @@ Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
|
|
|
59
59
|
|
|
60
60
|
Package ``apache-airflow-providers-cncf-kubernetes``
|
|
61
61
|
|
|
62
|
-
Release: ``10.4.
|
|
62
|
+
Release: ``10.4.3``
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
`Kubernetes <https://kubernetes.io/>`__
|
|
@@ -72,7 +72,7 @@ This is a provider package for ``cncf.kubernetes`` provider. All classes for thi
|
|
|
72
72
|
are in ``airflow.providers.cncf.kubernetes`` python package.
|
|
73
73
|
|
|
74
74
|
You can find package information and changelog for the provider
|
|
75
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.
|
|
75
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.3/>`_.
|
|
76
76
|
|
|
77
77
|
Installation
|
|
78
78
|
------------
|
|
@@ -98,5 +98,5 @@ PIP package Version required
|
|
|
98
98
|
====================== =====================
|
|
99
99
|
|
|
100
100
|
The changelog for the provider package can be found in the
|
|
101
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.
|
|
101
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.3/changelog.html>`_.
|
|
102
102
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
Package ``apache-airflow-providers-cncf-kubernetes``
|
|
25
25
|
|
|
26
|
-
Release: ``10.4.
|
|
26
|
+
Release: ``10.4.3``
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
`Kubernetes <https://kubernetes.io/>`__
|
|
@@ -36,7 +36,7 @@ This is a provider package for ``cncf.kubernetes`` provider. All classes for thi
|
|
|
36
36
|
are in ``airflow.providers.cncf.kubernetes`` python package.
|
|
37
37
|
|
|
38
38
|
You can find package information and changelog for the provider
|
|
39
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.
|
|
39
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.3/>`_.
|
|
40
40
|
|
|
41
41
|
Installation
|
|
42
42
|
------------
|
|
@@ -62,4 +62,4 @@ PIP package Version required
|
|
|
62
62
|
====================== =====================
|
|
63
63
|
|
|
64
64
|
The changelog for the provider package can be found in the
|
|
65
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.
|
|
65
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.3/changelog.html>`_.
|
|
@@ -28,6 +28,23 @@ Changelog
|
|
|
28
28
|
---------
|
|
29
29
|
|
|
30
30
|
|
|
31
|
+
10.4.3
|
|
32
|
+
......
|
|
33
|
+
|
|
34
|
+
Bug Fixes
|
|
35
|
+
~~~~~~~~~
|
|
36
|
+
|
|
37
|
+
* ``Remove 'subdir' arg from CLI commands (#49317)``
|
|
38
|
+
|
|
39
|
+
Misc
|
|
40
|
+
~~~~
|
|
41
|
+
|
|
42
|
+
* ``Use contextlib.suppress(exception) instead of try-except-pass and add SIM105 ruff rule (#49251)``
|
|
43
|
+
* ``remove superfluous else block (#49199)``
|
|
44
|
+
* ``Remove unused db method in k8s provider (#49186)``
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
31
48
|
10.4.2
|
|
32
49
|
......
|
|
33
50
|
|
|
@@ -34,14 +34,29 @@ For high-level changelog, see :doc:`package information including changelog <ind
|
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
|
|
37
|
+
10.4.3
|
|
38
|
+
......
|
|
39
|
+
|
|
40
|
+
Latest change: 2025-04-16
|
|
41
|
+
|
|
42
|
+
================================================================================================== =========== ===================================================================================================
|
|
43
|
+
Commit Committed Subject
|
|
44
|
+
================================================================================================== =========== ===================================================================================================
|
|
45
|
+
`694bdc6c43 <https://github.com/apache/airflow/commit/694bdc6c43f926a20dd765e5a20a238884325c29>`__ 2025-04-16 ``Remove 'subdir' arg from CLI commands (#49317)``
|
|
46
|
+
`47bd8961a9 <https://github.com/apache/airflow/commit/47bd8961a9ce4e2cea0dbabd400d2508eb291948>`__ 2025-04-15 ``Use contextlib.suppress(exception) instead of try-except-pass and add SIM105 ruff rule (#49251)``
|
|
47
|
+
`cb295c351a <https://github.com/apache/airflow/commit/cb295c351a016c0a10cab07f2a628b865cff3ca3>`__ 2025-04-14 ``remove superfluous else block (#49199)``
|
|
48
|
+
`0ca0f17996 <https://github.com/apache/airflow/commit/0ca0f17996c86efb292cf5b10181944c67e3b862>`__ 2025-04-13 ``Remove unused db method in k8s provider (#49186)``
|
|
49
|
+
================================================================================================== =========== ===================================================================================================
|
|
50
|
+
|
|
37
51
|
10.4.2
|
|
38
52
|
......
|
|
39
53
|
|
|
40
|
-
Latest change: 2025-04-
|
|
54
|
+
Latest change: 2025-04-10
|
|
41
55
|
|
|
42
56
|
================================================================================================== =========== ==================================================================================
|
|
43
57
|
Commit Committed Subject
|
|
44
58
|
================================================================================================== =========== ==================================================================================
|
|
59
|
+
`4a8567b20b <https://github.com/apache/airflow/commit/4a8567b20bdd6555cbdc936d6674bf4fa390b0d5>`__ 2025-04-10 ``Prepare docs for Apr 2nd wave of providers (#49051)``
|
|
45
60
|
`7b2ec33c7a <https://github.com/apache/airflow/commit/7b2ec33c7ad4998d9c9735b79593fcdcd3b9dd1f>`__ 2025-04-08 ``Remove unnecessary entries in get_provider_info and update the schema (#48849)``
|
|
46
61
|
`86d5b27f92 <https://github.com/apache/airflow/commit/86d5b27f92207571ebe0c29a42c42abbf6f8cb8c>`__ 2025-04-08 ``Make '@task' import from airflow.sdk (#48896)``
|
|
47
62
|
`139673d3ce <https://github.com/apache/airflow/commit/139673d3ce5552c2cf8bcb2d202e97342c4b237c>`__ 2025-04-07 ``Remove fab from preinstalled providers (#48457)``
|
|
@@ -22,9 +22,10 @@ description: |
|
|
|
22
22
|
`Kubernetes <https://kubernetes.io/>`__
|
|
23
23
|
|
|
24
24
|
state: ready
|
|
25
|
-
source-date-epoch:
|
|
25
|
+
source-date-epoch: 1744788926
|
|
26
26
|
# note that those versions are maintained by release manager - do not update them manually
|
|
27
27
|
versions:
|
|
28
|
+
- 10.4.3
|
|
28
29
|
- 10.4.2
|
|
29
30
|
- 10.4.1
|
|
30
31
|
- 10.4.0
|
|
@@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi"
|
|
|
25
25
|
|
|
26
26
|
[project]
|
|
27
27
|
name = "apache-airflow-providers-cncf-kubernetes"
|
|
28
|
-
version = "10.4.
|
|
28
|
+
version = "10.4.3"
|
|
29
29
|
description = "Provider package apache-airflow-providers-cncf-kubernetes for Apache Airflow"
|
|
30
30
|
readme = "README.rst"
|
|
31
31
|
authors = [
|
|
@@ -58,7 +58,7 @@ requires-python = "~=3.9"
|
|
|
58
58
|
# After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
|
|
59
59
|
dependencies = [
|
|
60
60
|
"aiofiles>=23.2.0",
|
|
61
|
-
"apache-airflow>=2.9.
|
|
61
|
+
"apache-airflow>=2.9.0",
|
|
62
62
|
"asgiref>=3.5.2",
|
|
63
63
|
"cryptography>=41.0.0",
|
|
64
64
|
# The Kubernetes API is known to introduce problems when upgraded to a MAJOR version. Airflow Core
|
|
@@ -112,8 +112,8 @@ apache-airflow-providers-common-sql = {workspace = true}
|
|
|
112
112
|
apache-airflow-providers-standard = {workspace = true}
|
|
113
113
|
|
|
114
114
|
[project.urls]
|
|
115
|
-
"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.
|
|
116
|
-
"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.
|
|
115
|
+
"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.3"
|
|
116
|
+
"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.3/changelog.html"
|
|
117
117
|
"Bug Tracker" = "https://github.com/apache/airflow/issues"
|
|
118
118
|
"Source Code" = "https://github.com/apache/airflow"
|
|
119
119
|
"Slack Chat" = "https://s.apache.org/airflow-slack"
|
|
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
|
|
|
29
29
|
|
|
30
30
|
__all__ = ["__version__"]
|
|
31
31
|
|
|
32
|
-
__version__ = "10.4.
|
|
32
|
+
__version__ = "10.4.3"
|
|
33
33
|
|
|
34
34
|
if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
|
|
35
35
|
"2.9.0"
|
|
@@ -27,20 +27,18 @@ def _convert_kube_model_object(obj, new_class):
|
|
|
27
27
|
convert_op = getattr(obj, "to_k8s_client_obj", None)
|
|
28
28
|
if callable(convert_op):
|
|
29
29
|
return obj.to_k8s_client_obj()
|
|
30
|
-
|
|
30
|
+
if isinstance(obj, new_class):
|
|
31
31
|
return obj
|
|
32
|
-
|
|
33
|
-
raise AirflowException(f"Expected {new_class}, got {type(obj)}")
|
|
32
|
+
raise AirflowException(f"Expected {new_class}, got {type(obj)}")
|
|
34
33
|
|
|
35
34
|
|
|
36
35
|
def _convert_from_dict(obj, new_class):
|
|
37
36
|
if isinstance(obj, new_class):
|
|
38
37
|
return obj
|
|
39
|
-
|
|
38
|
+
if isinstance(obj, dict):
|
|
40
39
|
api_client = ApiClient()
|
|
41
40
|
return api_client._ApiClient__deserialize_model(obj, new_class)
|
|
42
|
-
|
|
43
|
-
raise AirflowException(f"Expected dict or {new_class}, got {type(obj)}")
|
|
41
|
+
raise AirflowException(f"Expected dict or {new_class}, got {type(obj)}")
|
|
44
42
|
|
|
45
43
|
|
|
46
44
|
def convert_volume(volume) -> k8s.V1Volume:
|
|
@@ -111,8 +109,7 @@ def convert_image_pull_secrets(image_pull_secrets) -> list[k8s.V1LocalObjectRefe
|
|
|
111
109
|
if isinstance(image_pull_secrets, str):
|
|
112
110
|
secrets = image_pull_secrets.split(",")
|
|
113
111
|
return [k8s.V1LocalObjectReference(name=secret) for secret in secrets]
|
|
114
|
-
|
|
115
|
-
return image_pull_secrets
|
|
112
|
+
return image_pull_secrets
|
|
116
113
|
|
|
117
114
|
|
|
118
115
|
def convert_configmap(configmaps) -> k8s.V1EnvFromSource:
|
|
@@ -43,7 +43,10 @@ from airflow.utils.providers_configuration_loader import providers_configuration
|
|
|
43
43
|
def generate_pod_yaml(args):
|
|
44
44
|
"""Generate yaml files for each task in the DAG. Used for testing output of KubernetesExecutor."""
|
|
45
45
|
logical_date = args.logical_date if AIRFLOW_V_3_0_PLUS else args.execution_date
|
|
46
|
-
|
|
46
|
+
if AIRFLOW_V_3_0_PLUS:
|
|
47
|
+
dag = get_dag(bundle_names=args.bundle_name, dag_id=args.dag_id)
|
|
48
|
+
else:
|
|
49
|
+
dag = get_dag(subdir=args.subdir, dag_id=args.dag_id)
|
|
47
50
|
yaml_output_path = args.output_path
|
|
48
51
|
if AIRFLOW_V_3_0_PLUS:
|
|
49
52
|
dr = DagRun(dag.dag_id, logical_date=logical_date)
|
|
@@ -52,7 +52,6 @@ except ImportError: # 2.x compatibility.
|
|
|
52
52
|
from airflow.cli.cli_config import (
|
|
53
53
|
ARG_DAG_ID,
|
|
54
54
|
ARG_OUTPUT_PATH,
|
|
55
|
-
ARG_SUBDIR,
|
|
56
55
|
ARG_VERBOSE,
|
|
57
56
|
ActionCommand,
|
|
58
57
|
Arg,
|
|
@@ -94,6 +93,16 @@ if TYPE_CHECKING:
|
|
|
94
93
|
AirflowKubernetesScheduler,
|
|
95
94
|
)
|
|
96
95
|
|
|
96
|
+
|
|
97
|
+
if AIRFLOW_V_3_0_PLUS:
|
|
98
|
+
from airflow.cli.cli_config import ARG_BUNDLE_NAME
|
|
99
|
+
|
|
100
|
+
ARG_COMPAT = ARG_BUNDLE_NAME
|
|
101
|
+
else:
|
|
102
|
+
from airflow.cli.cli_config import ARG_SUBDIR # type: ignore[attr-defined]
|
|
103
|
+
|
|
104
|
+
ARG_COMPAT = ARG_SUBDIR
|
|
105
|
+
|
|
97
106
|
# CLI Args
|
|
98
107
|
ARG_NAMESPACE = Arg(
|
|
99
108
|
("--namespace",),
|
|
@@ -128,7 +137,7 @@ KUBERNETES_COMMANDS = (
|
|
|
128
137
|
help="Generate YAML files for all tasks in DAG. Useful for debugging tasks without "
|
|
129
138
|
"launching into a cluster",
|
|
130
139
|
func=lazy_load_command("airflow.providers.cncf.kubernetes.cli.kubernetes_command.generate_pod_yaml"),
|
|
131
|
-
args=(ARG_DAG_ID, ARG_LOGICAL_DATE,
|
|
140
|
+
args=(ARG_DAG_ID, ARG_LOGICAL_DATE, ARG_COMPAT, ARG_OUTPUT_PATH, ARG_VERBOSE),
|
|
132
141
|
),
|
|
133
142
|
)
|
|
134
143
|
|
|
@@ -482,7 +491,7 @@ class KubernetesExecutor(BaseExecutor):
|
|
|
482
491
|
).items
|
|
483
492
|
if not pod_list:
|
|
484
493
|
raise RuntimeError("Cannot find pod for ti %s", ti)
|
|
485
|
-
|
|
494
|
+
if len(pod_list) > 1:
|
|
486
495
|
raise RuntimeError("Found multiple pods for ti %s: %s", ti, pod_list)
|
|
487
496
|
res = client.read_namespaced_pod_log(
|
|
488
497
|
name=pod_list[0].metadata.name,
|
|
@@ -110,8 +110,7 @@ class KubernetesJobWatcher(multiprocessing.Process, LoggingMixin):
|
|
|
110
110
|
try:
|
|
111
111
|
if self.namespace == ALL_NAMESPACES:
|
|
112
112
|
return watcher.stream(kube_client.list_pod_for_all_namespaces, **query_kwargs)
|
|
113
|
-
|
|
114
|
-
return watcher.stream(kube_client.list_namespaced_pod, self.namespace, **query_kwargs)
|
|
113
|
+
return watcher.stream(kube_client.list_namespaced_pod, self.namespace, **query_kwargs)
|
|
115
114
|
except ApiException as e:
|
|
116
115
|
if str(e.status) == "410": # Resource version is too old
|
|
117
116
|
if self.namespace == ALL_NAMESPACES:
|
|
@@ -121,8 +120,7 @@ class KubernetesJobWatcher(multiprocessing.Process, LoggingMixin):
|
|
|
121
120
|
resource_version = pods.metadata.resource_version
|
|
122
121
|
query_kwargs["resource_version"] = resource_version
|
|
123
122
|
return self._pod_events(kube_client=kube_client, query_kwargs=query_kwargs)
|
|
124
|
-
|
|
125
|
-
raise
|
|
123
|
+
raise
|
|
126
124
|
|
|
127
125
|
def _run(
|
|
128
126
|
self,
|
|
@@ -564,5 +562,4 @@ def get_base_pod_from_template(pod_template_file: str | None, kube_config: Any)
|
|
|
564
562
|
"""
|
|
565
563
|
if pod_template_file:
|
|
566
564
|
return PodGenerator.deserialize_model_file(pod_template_file)
|
|
567
|
-
|
|
568
|
-
return PodGenerator.deserialize_model_file(kube_config.pod_template_file)
|
|
565
|
+
return PodGenerator.deserialize_model_file(kube_config.pod_template_file)
|
|
@@ -177,8 +177,7 @@ class KubernetesHook(BaseHook, PodOperatorHookProtocol):
|
|
|
177
177
|
except AirflowNotFoundException:
|
|
178
178
|
if conn_id == cls.default_conn_name:
|
|
179
179
|
return Connection(conn_id=cls.default_conn_name)
|
|
180
|
-
|
|
181
|
-
raise
|
|
180
|
+
raise
|
|
182
181
|
|
|
183
182
|
@cached_property
|
|
184
183
|
def conn_extras(self):
|
|
@@ -691,9 +690,8 @@ class KubernetesHook(BaseHook, PodOperatorHookProtocol):
|
|
|
691
690
|
and replicas == ready_replicas
|
|
692
691
|
):
|
|
693
692
|
return
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
sleep(polling_period_seconds)
|
|
693
|
+
self.log.info("Waiting until Deployment will be ready...")
|
|
694
|
+
sleep(polling_period_seconds)
|
|
697
695
|
|
|
698
696
|
_timeout -= polling_period_seconds
|
|
699
697
|
|
|
@@ -713,10 +711,10 @@ def _get_bool(val) -> bool | None:
|
|
|
713
711
|
"""Convert val to bool if can be done with certainty; if we cannot infer intention we return None."""
|
|
714
712
|
if isinstance(val, bool):
|
|
715
713
|
return val
|
|
716
|
-
|
|
714
|
+
if isinstance(val, str):
|
|
717
715
|
if val.strip().lower() == "true":
|
|
718
716
|
return True
|
|
719
|
-
|
|
717
|
+
if val.strip().lower() == "false":
|
|
720
718
|
return False
|
|
721
719
|
return None
|
|
722
720
|
|
|
@@ -89,8 +89,7 @@ def create_unique_id(
|
|
|
89
89
|
base_name = slugify(name, lowercase=True)[:max_length].strip(".-")
|
|
90
90
|
if unique:
|
|
91
91
|
return add_unique_suffix(name=base_name, rand_len=8, max_len=max_length)
|
|
92
|
-
|
|
93
|
-
return base_name
|
|
92
|
+
return base_name
|
|
94
93
|
|
|
95
94
|
|
|
96
95
|
def annotations_to_key(annotations: dict[str, str]) -> TaskInstanceKey:
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
from __future__ import annotations
|
|
20
20
|
|
|
21
|
+
import contextlib
|
|
21
22
|
import time
|
|
22
23
|
from copy import deepcopy
|
|
23
24
|
from datetime import datetime as dt
|
|
@@ -326,12 +327,10 @@ class CustomObjectLauncher(LoggingMixin):
|
|
|
326
327
|
driver_state = spark_job_info.get("status", {}).get("applicationState", {}).get("state", "SUBMITTED")
|
|
327
328
|
if driver_state == CustomObjectStatus.FAILED:
|
|
328
329
|
err = spark_job_info.get("status", {}).get("applicationState", {}).get("errorMessage", "N/A")
|
|
329
|
-
|
|
330
|
+
with contextlib.suppress(Exception):
|
|
330
331
|
self.pod_manager.fetch_container_logs(
|
|
331
332
|
pod=self.pod_spec, container_name="spark-kubernetes-driver"
|
|
332
333
|
)
|
|
333
|
-
except Exception:
|
|
334
|
-
pass
|
|
335
334
|
raise AirflowException(f"Spark Job Failed. Error stack: {err}")
|
|
336
335
|
return driver_state == CustomObjectStatus.SUBMITTED
|
|
337
336
|
|
|
@@ -389,7 +389,7 @@ class KubernetesJobOperator(KubernetesPodOperator):
|
|
|
389
389
|
return base_spec
|
|
390
390
|
if not base_spec and client_spec:
|
|
391
391
|
return client_spec
|
|
392
|
-
|
|
392
|
+
if client_spec and base_spec:
|
|
393
393
|
client_spec.template.spec = PodGenerator.reconcile_specs(
|
|
394
394
|
base_spec.template.spec, client_spec.template.spec
|
|
395
395
|
)
|
|
@@ -101,7 +101,7 @@ class KubernetesStartKueueJobOperator(KubernetesJobOperator):
|
|
|
101
101
|
"The `suspend` parameter can't be False. If you want to use Kueue for running Job"
|
|
102
102
|
" in a Kubernetes cluster, set the `suspend` parameter to True.",
|
|
103
103
|
)
|
|
104
|
-
|
|
104
|
+
if self.suspend is None:
|
|
105
105
|
self.log.info(
|
|
106
106
|
"You have not set parameter `suspend` in class %s. "
|
|
107
107
|
"For running a Job in Kueue the `suspend` parameter has been set to True.",
|
|
@@ -857,7 +857,7 @@ class KubernetesPodOperator(BaseOperator):
|
|
|
857
857
|
message = event.get("stack_trace", event["message"])
|
|
858
858
|
raise AirflowException(message)
|
|
859
859
|
|
|
860
|
-
|
|
860
|
+
if event["status"] == "running":
|
|
861
861
|
if self.get_logs:
|
|
862
862
|
self.log.info("Resuming logs read from time %r", last_log_time)
|
|
863
863
|
|
|
@@ -1297,7 +1297,7 @@ class _optionally_suppress(AbstractContextManager):
|
|
|
1297
1297
|
matching_error = error and issubclass(exctype, self._exceptions)
|
|
1298
1298
|
if (error and not matching_error) or (matching_error and self.reraise):
|
|
1299
1299
|
return False
|
|
1300
|
-
|
|
1300
|
+
if matching_error:
|
|
1301
1301
|
self.exception = excinst
|
|
1302
1302
|
logger = logging.getLogger(__name__)
|
|
1303
1303
|
logger.exception(excinst)
|
|
@@ -99,8 +99,7 @@ class KubernetesResourceBaseOperator(BaseOperator):
|
|
|
99
99
|
def get_namespace(self) -> str:
|
|
100
100
|
if self._namespace:
|
|
101
101
|
return self._namespace
|
|
102
|
-
|
|
103
|
-
return self.hook.get_namespace() or "default"
|
|
102
|
+
return self.hook.get_namespace() or "default"
|
|
104
103
|
|
|
105
104
|
def get_crd_fields(self, body: dict) -> tuple[str, str, str, str]:
|
|
106
105
|
api_version = body["apiVersion"]
|
|
@@ -245,7 +245,7 @@ class SparkKubernetesOperator(KubernetesPodOperator):
|
|
|
245
245
|
pod = None
|
|
246
246
|
if len(pod_list) > 1: # and self.reattach_on_restart:
|
|
247
247
|
raise AirflowException(f"More than one pod running with labels: {label_selector}")
|
|
248
|
-
|
|
248
|
+
if len(pod_list) == 1:
|
|
249
249
|
pod = pod_list[0]
|
|
250
250
|
self.log.info(
|
|
251
251
|
"Found matching driver pod %s with labels %s", pod.metadata.name, pod.metadata.labels
|
|
@@ -162,10 +162,9 @@ class PodGenerator:
|
|
|
162
162
|
|
|
163
163
|
if isinstance(k8s_object, k8s.V1Pod):
|
|
164
164
|
return k8s_object
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
)
|
|
165
|
+
raise TypeError(
|
|
166
|
+
"Cannot convert a non-kubernetes.client.models.V1Pod object into a KubernetesExecutorConfig"
|
|
167
|
+
)
|
|
169
168
|
|
|
170
169
|
@staticmethod
|
|
171
170
|
def reconcile_pods(base_pod: k8s.V1Pod, client_pod: k8s.V1Pod | None) -> k8s.V1Pod:
|
|
@@ -203,7 +202,7 @@ class PodGenerator:
|
|
|
203
202
|
return base_meta
|
|
204
203
|
if not base_meta and client_meta:
|
|
205
204
|
return client_meta
|
|
206
|
-
|
|
205
|
+
if client_meta and base_meta:
|
|
207
206
|
client_meta.labels = merge_objects(base_meta.labels, client_meta.labels)
|
|
208
207
|
client_meta.annotations = merge_objects(base_meta.annotations, client_meta.annotations)
|
|
209
208
|
extend_object_field(base_meta, client_meta, "managed_fields")
|
|
@@ -229,7 +228,7 @@ class PodGenerator:
|
|
|
229
228
|
return base_spec
|
|
230
229
|
if not base_spec and client_spec:
|
|
231
230
|
return client_spec
|
|
232
|
-
|
|
231
|
+
if client_spec and base_spec:
|
|
233
232
|
client_spec.containers = PodGenerator.reconcile_containers(
|
|
234
233
|
base_spec.containers, client_spec.containers
|
|
235
234
|
)
|
|
@@ -33,7 +33,7 @@ def convert_env_vars(env_vars) -> list[k8s.V1EnvVar]:
|
|
|
33
33
|
for k, v in env_vars.items():
|
|
34
34
|
res.append(k8s.V1EnvVar(name=k, value=v))
|
|
35
35
|
return res
|
|
36
|
-
|
|
36
|
+
if isinstance(env_vars, list):
|
|
37
37
|
if all([isinstance(e, k8s.V1EnvVar) for e in env_vars]):
|
|
38
38
|
return env_vars
|
|
39
39
|
raise AirflowException(f"Expected dict or list of V1EnvVar, got {type(env_vars)}")
|
|
@@ -128,9 +128,8 @@ class SparkKubernetesSensor(BaseSensorOperator):
|
|
|
128
128
|
if application_state in self.FAILURE_STATES:
|
|
129
129
|
message = f"Spark application failed with state: {application_state}"
|
|
130
130
|
raise AirflowException(message)
|
|
131
|
-
|
|
131
|
+
if application_state in self.SUCCESS_STATES:
|
|
132
132
|
self.log.info("Spark application ended successfully")
|
|
133
133
|
return True
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
return False
|
|
134
|
+
self.log.info("Spark application is still in state: %s", application_state)
|
|
135
|
+
return False
|
|
@@ -19,14 +19,11 @@ from __future__ import annotations
|
|
|
19
19
|
|
|
20
20
|
from typing import TYPE_CHECKING
|
|
21
21
|
|
|
22
|
-
from jinja2 import TemplateAssertionError, UndefinedError
|
|
23
22
|
from kubernetes.client.api_client import ApiClient
|
|
24
23
|
|
|
25
|
-
from airflow.exceptions import AirflowException
|
|
26
24
|
from airflow.providers.cncf.kubernetes.kube_config import KubeConfig
|
|
27
25
|
from airflow.providers.cncf.kubernetes.kubernetes_helper_functions import create_unique_id
|
|
28
26
|
from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator
|
|
29
|
-
from airflow.utils.session import NEW_SESSION, provide_session
|
|
30
27
|
|
|
31
28
|
if TYPE_CHECKING:
|
|
32
29
|
from airflow.models.taskinstance import TaskInstance
|
|
@@ -61,17 +58,3 @@ def render_k8s_pod_yaml(task_instance: TaskInstance) -> dict | None:
|
|
|
61
58
|
)
|
|
62
59
|
sanitized_pod = ApiClient().sanitize_for_serialization(pod)
|
|
63
60
|
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
|
|
@@ -236,7 +236,7 @@ class KubernetesPodTrigger(BaseTrigger):
|
|
|
236
236
|
"last_log_time": self.last_log_time,
|
|
237
237
|
}
|
|
238
238
|
)
|
|
239
|
-
|
|
239
|
+
if container_state == ContainerState.FAILED:
|
|
240
240
|
return TriggerEvent(
|
|
241
241
|
{
|
|
242
242
|
"status": "failed",
|
|
@@ -289,8 +289,7 @@ class KubernetesPodTrigger(BaseTrigger):
|
|
|
289
289
|
if state_obj is not None:
|
|
290
290
|
if state != ContainerState.TERMINATED:
|
|
291
291
|
return state
|
|
292
|
-
else
|
|
293
|
-
return ContainerState.TERMINATED if state_obj.exit_code == 0 else ContainerState.FAILED
|
|
292
|
+
return ContainerState.TERMINATED if state_obj.exit_code == 0 else ContainerState.FAILED
|
|
294
293
|
return ContainerState.UNDEFINED
|
|
295
294
|
|
|
296
295
|
@staticmethod
|
|
@@ -520,15 +520,14 @@ class PodManager(LoggingMixin):
|
|
|
520
520
|
return PodLoggingStatus(running=False, last_log_time=last_log_time)
|
|
521
521
|
if not follow:
|
|
522
522
|
return PodLoggingStatus(running=True, last_log_time=last_log_time)
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
time.sleep(1)
|
|
523
|
+
# a timeout is a normal thing and we ignore it and resume following logs
|
|
524
|
+
if not isinstance(exc, TimeoutError):
|
|
525
|
+
self.log.warning(
|
|
526
|
+
"Pod %s log read interrupted but container %s still running. Logs generated in the last one second might get duplicated.",
|
|
527
|
+
pod.metadata.name,
|
|
528
|
+
container_name,
|
|
529
|
+
)
|
|
530
|
+
time.sleep(1)
|
|
532
531
|
|
|
533
532
|
def _reconcile_requested_log_containers(
|
|
534
533
|
self, requested: Iterable[str] | str | bool | None, actual: list[str], pod_name
|
|
@@ -30,7 +30,7 @@ def data_file():
|
|
|
30
30
|
if not DATA_FILE_DIRECTORY.exists():
|
|
31
31
|
msg = f"Data Directory {DATA_FILE_DIRECTORY.as_posix()!r} does not exist."
|
|
32
32
|
raise FileNotFoundError(msg)
|
|
33
|
-
|
|
33
|
+
if not DATA_FILE_DIRECTORY.is_dir():
|
|
34
34
|
msg = f"Data Directory {DATA_FILE_DIRECTORY.as_posix()!r} expected to be a directory."
|
|
35
35
|
raise NotADirectoryError(msg)
|
|
36
36
|
|
|
@@ -24,8 +24,8 @@ import yaml
|
|
|
24
24
|
from kubernetes.client import models as k8s
|
|
25
25
|
from sqlalchemy.orm import make_transient
|
|
26
26
|
|
|
27
|
-
from airflow.models.renderedtifields import RenderedTaskInstanceFields
|
|
28
|
-
from airflow.providers.cncf.kubernetes.template_rendering import
|
|
27
|
+
from airflow.models.renderedtifields import RenderedTaskInstanceFields as RTIF
|
|
28
|
+
from airflow.providers.cncf.kubernetes.template_rendering import render_k8s_pod_yaml
|
|
29
29
|
from airflow.utils import timezone
|
|
30
30
|
from airflow.utils.session import create_session
|
|
31
31
|
from airflow.version import version
|
|
@@ -149,34 +149,6 @@ def test_render_k8s_pod_yaml_with_custom_pod_template_and_pod_override(
|
|
|
149
149
|
assert ti_pod_yaml["metadata"]["annotations"]["test"] == "annotation"
|
|
150
150
|
|
|
151
151
|
|
|
152
|
-
@mock.patch.dict(os.environ, {"AIRFLOW_IS_K8S_EXECUTOR_POD": "True"})
|
|
153
|
-
@mock.patch.object(RenderedTaskInstanceFields, "get_k8s_pod_yaml")
|
|
154
|
-
@mock.patch("airflow.providers.cncf.kubernetes.template_rendering.render_k8s_pod_yaml")
|
|
155
|
-
def test_get_rendered_k8s_spec(render_k8s_pod_yaml, rtif_get_k8s_pod_yaml, create_task_instance):
|
|
156
|
-
# Create new TI for the same Task
|
|
157
|
-
ti = create_task_instance()
|
|
158
|
-
|
|
159
|
-
mock.patch.object(ti, "render_k8s_pod_yaml", autospec=True)
|
|
160
|
-
|
|
161
|
-
fake_spec = {"ermagawds": "pods"}
|
|
162
|
-
|
|
163
|
-
session = mock.Mock()
|
|
164
|
-
|
|
165
|
-
rtif_get_k8s_pod_yaml.return_value = fake_spec
|
|
166
|
-
assert get_rendered_k8s_spec(ti, session=session) == fake_spec
|
|
167
|
-
|
|
168
|
-
rtif_get_k8s_pod_yaml.assert_called_once_with(ti, session=session)
|
|
169
|
-
render_k8s_pod_yaml.assert_not_called()
|
|
170
|
-
|
|
171
|
-
# Now test that when we _dont_ find it in the DB, it calls render_k8s_pod_yaml
|
|
172
|
-
rtif_get_k8s_pod_yaml.return_value = None
|
|
173
|
-
render_k8s_pod_yaml.return_value = fake_spec
|
|
174
|
-
|
|
175
|
-
assert get_rendered_k8s_spec(session) == fake_spec
|
|
176
|
-
|
|
177
|
-
render_k8s_pod_yaml.assert_called_once()
|
|
178
|
-
|
|
179
|
-
|
|
180
152
|
@mock.patch.dict(os.environ, {"AIRFLOW_IS_K8S_EXECUTOR_POD": "True"})
|
|
181
153
|
@mock.patch("airflow.providers.cncf.kubernetes.template_rendering.render_k8s_pod_yaml")
|
|
182
154
|
def test_get_k8s_pod_yaml(render_k8s_pod_yaml, dag_maker, session):
|
|
File without changes
|