apache-airflow-providers-cncf-kubernetes 10.6.1rc1__tar.gz → 10.6.2rc1__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.
Files changed (159) hide show
  1. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/PKG-INFO +10 -8
  2. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/README.rst +5 -4
  3. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/changelog.rst +30 -0
  4. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/index.rst +3 -1
  5. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/provider.yaml +2 -1
  6. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/pyproject.toml +5 -4
  7. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1/src/airflow/providers/cncf → apache_airflow_providers_cncf_kubernetes-10.6.2rc1/src/airflow}/__init__.py +1 -1
  8. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/__init__.py +1 -1
  9. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1/tests/system → apache_airflow_providers_cncf_kubernetes-10.6.2rc1/src/airflow/providers/cncf}/__init__.py +1 -1
  10. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/__init__.py +1 -1
  11. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/cli/kubernetes_command.py +6 -1
  12. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py +1 -1
  13. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/hooks/kubernetes.py +2 -6
  14. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/operators/job.py +100 -36
  15. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/operators/pod.py +18 -16
  16. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/operators/resource.py +3 -4
  17. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/triggers/job.py +43 -22
  18. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/triggers/pod.py +1 -1
  19. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/utils/pod_manager.py +3 -3
  20. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/version_compat.py +7 -2
  21. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1/src/airflow → apache_airflow_providers_cncf_kubernetes-10.6.2rc1/tests/system}/__init__.py +1 -1
  22. apache_airflow_providers_cncf_kubernetes-10.6.2rc1/tests/system/cncf/__init__.py +17 -0
  23. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/system/cncf/kubernetes/example_kubernetes_decorator.py +6 -1
  24. apache_airflow_providers_cncf_kubernetes-10.6.2rc1/tests/unit/__init__.py +17 -0
  25. apache_airflow_providers_cncf_kubernetes-10.6.2rc1/tests/unit/cncf/__init__.py +17 -0
  26. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py +2 -1
  27. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/decorators/test_kubernetes_cmd.py +1 -1
  28. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py +7 -16
  29. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py +23 -1
  30. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/log_handlers/test_log_handlers.py +7 -1
  31. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/operators/test_job.py +160 -12
  32. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/operators/test_pod.py +70 -12
  33. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py +6 -1
  34. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/sensors/test_spark_kubernetes.py +3 -7
  35. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/triggers/test_job.py +12 -4
  36. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/utils/test_pod_manager.py +2 -2
  37. apache_airflow_providers_cncf_kubernetes-10.6.1rc1/tests/system/cncf/__init__.py +0 -17
  38. apache_airflow_providers_cncf_kubernetes-10.6.1rc1/tests/unit/__init__.py +0 -17
  39. apache_airflow_providers_cncf_kubernetes-10.6.1rc1/tests/unit/cncf/__init__.py +0 -17
  40. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/.latest-doc-only-change.txt +0 -0
  41. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/cli-ref.rst +0 -0
  42. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/commits.rst +0 -0
  43. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/conf.py +0 -0
  44. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/configurations-ref.rst +0 -0
  45. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/connections/kubernetes.rst +0 -0
  46. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/img/arch-diag-kubernetes.png +0 -0
  47. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/img/arch-diag-kubernetes2.png +0 -0
  48. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/img/k8s-failed-pod.png +0 -0
  49. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/img/k8s-happy-path.png +0 -0
  50. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/installing-providers-from-sources.rst +0 -0
  51. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/integration-logos/Kubernetes.png +0 -0
  52. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/integration-logos/Spark-On-Kubernetes.png +0 -0
  53. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/kubernetes_executor.rst +0 -0
  54. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/local_kubernetes_executor.rst +0 -0
  55. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/operators.rst +0 -0
  56. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/redirects.txt +0 -0
  57. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/docs/security.rst +0 -0
  58. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/LICENSE +0 -0
  59. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/backcompat/__init__.py +0 -0
  60. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/backcompat/backwards_compat_converters.py +0 -0
  61. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/callbacks.py +0 -0
  62. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/cli/__init__.py +0 -0
  63. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/decorators/__init__.py +0 -0
  64. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/decorators/kubernetes.py +0 -0
  65. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/decorators/kubernetes_cmd.py +0 -0
  66. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/exceptions.py +0 -0
  67. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/executors/__init__.py +0 -0
  68. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_types.py +0 -0
  69. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py +0 -0
  70. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py +0 -0
  71. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/get_provider_info.py +0 -0
  72. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/hooks/__init__.py +0 -0
  73. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/k8s_model.py +0 -0
  74. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/kube_client.py +0 -0
  75. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/kube_config.py +0 -0
  76. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/kubernetes_executor_templates/__init__.py +0 -0
  77. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/kubernetes_executor_templates/basic_template.yaml +0 -0
  78. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/kubernetes_helper_functions.py +0 -0
  79. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/operators/__init__.py +0 -0
  80. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/operators/custom_object_launcher.py +0 -0
  81. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/operators/kueue.py +0 -0
  82. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/operators/spark_kubernetes.py +0 -0
  83. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/pod_generator.py +0 -0
  84. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/__init__.py +0 -0
  85. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_image_template.yaml +0 -0
  86. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_volume_template.yaml +0 -0
  87. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/git_sync_template.yaml +0 -0
  88. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/python_kubernetes_script.jinja2 +0 -0
  89. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/python_kubernetes_script.py +0 -0
  90. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/resource_convert/__init__.py +0 -0
  91. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/resource_convert/configmap.py +0 -0
  92. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/resource_convert/env_variable.py +0 -0
  93. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/resource_convert/secret.py +0 -0
  94. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/secret.py +0 -0
  95. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/sensors/__init__.py +0 -0
  96. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/sensors/spark_kubernetes.py +0 -0
  97. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/template_rendering.py +0 -0
  98. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/triggers/__init__.py +0 -0
  99. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/utils/__init__.py +0 -0
  100. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/utils/delete_from.py +0 -0
  101. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/utils/k8s_resource_iterator.py +0 -0
  102. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/src/airflow/providers/cncf/kubernetes/utils/xcom_sidecar.py +0 -0
  103. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/conftest.py +0 -0
  104. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/system/cncf/kubernetes/__init__.py +0 -0
  105. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/system/cncf/kubernetes/example_kubernetes.py +0 -0
  106. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/system/cncf/kubernetes/example_kubernetes_async.py +0 -0
  107. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/system/cncf/kubernetes/example_kubernetes_cmd_decorator.py +0 -0
  108. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/system/cncf/kubernetes/example_kubernetes_job.py +0 -0
  109. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/system/cncf/kubernetes/example_kubernetes_kueue.py +0 -0
  110. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/system/cncf/kubernetes/example_kubernetes_resource.py +0 -0
  111. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/system/cncf/kubernetes/example_spark_kubernetes.py +0 -0
  112. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/system/cncf/kubernetes/example_spark_kubernetes_spark_pi.yaml +0 -0
  113. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/system/cncf/kubernetes/spark_job_template.yaml +0 -0
  114. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/__init__.py +0 -0
  115. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/backcompat/__init__.py +0 -0
  116. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/backcompat/test_backwards_compat_converters.py +0 -0
  117. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/cli/__init__.py +0 -0
  118. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/cli/test_kubernetes_command.py +0 -0
  119. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/conftest.py +0 -0
  120. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/__init__.py +0 -0
  121. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/executor/__init__.py +0 -0
  122. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/executor/basic_template.yaml +0 -0
  123. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/kube_config +0 -0
  124. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/pods/__init__.py +0 -0
  125. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/pods/generator_base.yaml +0 -0
  126. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/pods/generator_base_with_secrets.yaml +0 -0
  127. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/pods/template.yaml +0 -0
  128. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/spark/__init__.py +0 -0
  129. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/spark/application_template.yaml +0 -0
  130. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/spark/application_test.json +0 -0
  131. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/spark/application_test.yaml +0 -0
  132. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/spark/application_test_with_no_name_from_config.json +0 -0
  133. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/data_files/spark/application_test_with_no_name_from_config.yaml +0 -0
  134. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/decorators/__init__.py +0 -0
  135. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/executors/__init__.py +0 -0
  136. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py +0 -0
  137. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/executors/test_local_kubernetes_executor.py +0 -0
  138. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/hooks/__init__.py +0 -0
  139. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/log_handlers/__init__.py +0 -0
  140. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/models/__init__.py +0 -0
  141. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/models/test_secret.py +0 -0
  142. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/operators/__init__.py +0 -0
  143. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/operators/test_custom_object_launcher.py +0 -0
  144. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/operators/test_kueue.py +0 -0
  145. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/operators/test_resource.py +0 -0
  146. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/resource_convert/__init__.py +0 -0
  147. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/resource_convert/test_configmap.py +0 -0
  148. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/resource_convert/test_env_variable.py +0 -0
  149. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/resource_convert/test_secret.py +0 -0
  150. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/sensors/__init__.py +0 -0
  151. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/test_callbacks.py +0 -0
  152. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/test_client.py +0 -0
  153. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/test_kubernetes_helper_functions.py +0 -0
  154. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/test_pod_generator.py +0 -0
  155. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/test_template_rendering.py +0 -0
  156. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/triggers/__init__.py +0 -0
  157. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/triggers/test_pod.py +0 -0
  158. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/utils/__init__.py +0 -0
  159. {apache_airflow_providers_cncf_kubernetes-10.6.1rc1 → apache_airflow_providers_cncf_kubernetes-10.6.2rc1}/tests/unit/cncf/kubernetes/utils/test_k8s_resource_iterator.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-providers-cncf-kubernetes
3
- Version: 10.6.1rc1
3
+ Version: 10.6.2rc1
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
7
  Maintainer-email: Apache Software Foundation <dev@airflow.apache.org>
8
- Requires-Python: ~=3.10
8
+ Requires-Python: >=3.10
9
9
  Description-Content-Type: text/x-rst
10
10
  Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: Environment :: Console
@@ -18,6 +18,7 @@ Classifier: License :: OSI Approved :: Apache Software License
18
18
  Classifier: Programming Language :: Python :: 3.10
19
19
  Classifier: Programming Language :: Python :: 3.11
20
20
  Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
21
22
  Classifier: Topic :: System :: Monitoring
22
23
  Requires-Dist: aiofiles>=23.2.0
23
24
  Requires-Dist: apache-airflow>=2.10.0rc1
@@ -26,8 +27,8 @@ Requires-Dist: cryptography>=41.0.0
26
27
  Requires-Dist: kubernetes>=32.0.0,<33.0.0
27
28
  Requires-Dist: kubernetes_asyncio>=32.0.0,<33.0.0
28
29
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
29
- Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.1/changelog.html
30
- Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.1
30
+ Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.2/changelog.html
31
+ Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.2
31
32
  Project-URL: Mastodon, https://fosstodon.org/@airflow
32
33
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
33
34
  Project-URL: Source Code, https://github.com/apache/airflow
@@ -58,8 +59,9 @@ Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
58
59
 
59
60
  Package ``apache-airflow-providers-cncf-kubernetes``
60
61
 
61
- Release: ``10.6.1``
62
+ Release: ``10.6.2``
62
63
 
64
+ Release Date: ``|PypiReleaseDate|``
63
65
 
64
66
  `Kubernetes <https://kubernetes.io/>`__
65
67
 
@@ -71,7 +73,7 @@ This is a provider package for ``cncf.kubernetes`` provider. All classes for thi
71
73
  are in ``airflow.providers.cncf.kubernetes`` python package.
72
74
 
73
75
  You can find package information and changelog for the provider
74
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.1/>`_.
76
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.2/>`_.
75
77
 
76
78
  Installation
77
79
  ------------
@@ -80,7 +82,7 @@ You can install this package on top of an existing Airflow 2 installation (see `
80
82
  for the minimum Airflow version supported) via
81
83
  ``pip install apache-airflow-providers-cncf-kubernetes``
82
84
 
83
- The package supports the following python versions: 3.10,3.11,3.12
85
+ The package supports the following python versions: 3.10,3.11,3.12,3.13
84
86
 
85
87
  Requirements
86
88
  ------------
@@ -97,5 +99,5 @@ PIP package Version required
97
99
  ====================== ====================
98
100
 
99
101
  The changelog for the provider package can be found in the
100
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.1/changelog.html>`_.
102
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.2/changelog.html>`_.
101
103
 
@@ -23,8 +23,9 @@
23
23
 
24
24
  Package ``apache-airflow-providers-cncf-kubernetes``
25
25
 
26
- Release: ``10.6.1``
26
+ Release: ``10.6.2``
27
27
 
28
+ Release Date: ``|PypiReleaseDate|``
28
29
 
29
30
  `Kubernetes <https://kubernetes.io/>`__
30
31
 
@@ -36,7 +37,7 @@ This is a provider package for ``cncf.kubernetes`` provider. All classes for thi
36
37
  are in ``airflow.providers.cncf.kubernetes`` python package.
37
38
 
38
39
  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.6.1/>`_.
40
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.2/>`_.
40
41
 
41
42
  Installation
42
43
  ------------
@@ -45,7 +46,7 @@ You can install this package on top of an existing Airflow 2 installation (see `
45
46
  for the minimum Airflow version supported) via
46
47
  ``pip install apache-airflow-providers-cncf-kubernetes``
47
48
 
48
- The package supports the following python versions: 3.10,3.11,3.12
49
+ The package supports the following python versions: 3.10,3.11,3.12,3.13
49
50
 
50
51
  Requirements
51
52
  ------------
@@ -62,4 +63,4 @@ PIP package Version required
62
63
  ====================== ====================
63
64
 
64
65
  The changelog for the provider package can be found in the
65
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.1/changelog.html>`_.
66
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.2/changelog.html>`_.
@@ -28,6 +28,36 @@ Changelog
28
28
  ---------
29
29
 
30
30
 
31
+ 10.6.2
32
+ ......
33
+
34
+ Bug Fixes
35
+ ~~~~~~~~~
36
+
37
+ * ``Pass cluster context to AsyncKubernetesHook (#53504)``
38
+ * ``Handle multiple pods to prevent KubernetesJobOperator falls with parallelism option (#49899)``
39
+ * ``(fix): Handle pod evictions correctly during retry in KubernetesPodOperator (#53059)``
40
+
41
+ Misc
42
+ ~~~~
43
+
44
+ * ``Deprecate decorators from Core (#53629)``
45
+ * ``Use asyncio.run instead of loop.run_until_complete. (#53475)``
46
+ * ``Add Python 3.13 support for Airflow. (#46891)``
47
+ * ``Remove 'airflow.utils.xcom' module and add backcompat shim (#53187)``
48
+ * ``Cleanup mypy ignores cncf provider where possible (#53264)``
49
+ * ``Remove type ignore across codebase after mypy upgrade (#53243)``
50
+ * ``Replace usages of XCOM_RETURN_KEY in providers to not be from utils (#53170)``
51
+ * ``Make cncf provider compatible with mypy 1.16.1 (#53121)``
52
+ * ``Remove upper-binding for "python-requires" (#52980)``
53
+ * ``Temporarily switch to use >=,< pattern instead of '~=' (#52967)``
54
+ * ``Move all BaseHook usages to version_compat in cncf (#52798)``
55
+
56
+ .. Below changes are excluded from the changelog. Move them to
57
+ appropriate section above if needed. Do not delete the lines(!):
58
+ * ``Making some brittle tests related to log assertion more robust (#53743)``
59
+ * ``Make dag_version_id in TI non-nullable (#50825)``
60
+
31
61
  10.6.1
32
62
  ......
33
63
 
@@ -87,7 +87,9 @@ apache-airflow-providers-cncf-kubernetes package
87
87
  `Kubernetes <https://kubernetes.io/>`__
88
88
 
89
89
 
90
- Release: 10.6.1
90
+ Release: 10.6.2
91
+
92
+ Release Date: ``|PypiReleaseDate|``
91
93
 
92
94
  Provider package
93
95
  ----------------
@@ -22,12 +22,13 @@ description: |
22
22
  `Kubernetes <https://kubernetes.io/>`__
23
23
 
24
24
  state: ready
25
- source-date-epoch: 1751472892
25
+ source-date-epoch: 1753689981
26
26
  # Note that those versions are maintained by release manager - do not update them manually
27
27
  # with the exception of case where other provider in sources has >= new provider version.
28
28
  # In such case adding >= NEW_VERSION and bumping to NEW_VERSION in a provider have
29
29
  # to be done in the same PR
30
30
  versions:
31
+ - 10.6.2
31
32
  - 10.6.1
32
33
  - 10.6.0
33
34
  - 10.5.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.6.1rc1"
28
+ version = "10.6.2rc1"
29
29
  description = "Provider package apache-airflow-providers-cncf-kubernetes for Apache Airflow"
30
30
  readme = "README.rst"
31
31
  authors = [
@@ -47,9 +47,10 @@ classifiers = [
47
47
  "Programming Language :: Python :: 3.10",
48
48
  "Programming Language :: Python :: 3.11",
49
49
  "Programming Language :: Python :: 3.12",
50
+ "Programming Language :: Python :: 3.13",
50
51
  "Topic :: System :: Monitoring",
51
52
  ]
52
- requires-python = "~=3.10"
53
+ requires-python = ">=3.10"
53
54
 
54
55
  # The dependencies should be modified in place in the generated file.
55
56
  # Any change in the dependencies is preserved when the file is regenerated
@@ -107,8 +108,8 @@ apache-airflow-providers-common-sql = {workspace = true}
107
108
  apache-airflow-providers-standard = {workspace = true}
108
109
 
109
110
  [project.urls]
110
- "Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.1"
111
- "Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.1/changelog.html"
111
+ "Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.2"
112
+ "Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.2/changelog.html"
112
113
  "Bug Tracker" = "https://github.com/apache/airflow/issues"
113
114
  "Source Code" = "https://github.com/apache/airflow"
114
115
  "Slack Chat" = "https://s.apache.org/airflow-slack"
@@ -14,4 +14,4 @@
14
14
  # KIND, either express or implied. See the License for the
15
15
  # specific language governing permissions and limitations
16
16
  # under the License.
17
- __path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
17
+ __path__ = __import__("pkgutil").extend_path(__path__, __name__)
@@ -14,4 +14,4 @@
14
14
  # KIND, either express or implied. See the License for the
15
15
  # specific language governing permissions and limitations
16
16
  # under the License.
17
- __path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
17
+ __path__ = __import__("pkgutil").extend_path(__path__, __name__)
@@ -14,4 +14,4 @@
14
14
  # KIND, either express or implied. See the License for the
15
15
  # specific language governing permissions and limitations
16
16
  # under the License.
17
- __path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
17
+ __path__ = __import__("pkgutil").extend_path(__path__, __name__)
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
29
29
 
30
30
  __all__ = ["__version__"]
31
31
 
32
- __version__ = "10.6.1"
32
+ __version__ = "10.6.2"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
35
  "2.10.0"
@@ -66,7 +66,12 @@ def generate_pod_yaml(args):
66
66
  kube_config = KubeConfig()
67
67
 
68
68
  for task in dag.tasks:
69
- ti = TaskInstance(task, run_id=dr.run_id)
69
+ if AIRFLOW_V_3_0_PLUS:
70
+ from uuid6 import uuid7
71
+
72
+ ti = TaskInstance(task, run_id=dr.run_id, dag_version_id=uuid7())
73
+ else:
74
+ ti = TaskInstance(task, run_id=dr.run_id)
70
75
  ti.dag_run = dr
71
76
  ti.dag_model = dm
72
77
 
@@ -307,7 +307,7 @@ class KubernetesExecutor(BaseExecutor):
307
307
  executor_config = w.ti.executor_config or {}
308
308
 
309
309
  del self.queued_tasks[key]
310
- self.execute_async(key=key, command=command, queue=queue, executor_config=executor_config) # type: ignore[arg-type]
310
+ self.execute_async(key=key, command=command, queue=queue, executor_config=executor_config)
311
311
  self.running.add(key)
312
312
 
313
313
  def sync(self) -> None:
@@ -44,11 +44,7 @@ from airflow.providers.cncf.kubernetes.utils.pod_manager import (
44
44
  container_is_completed,
45
45
  container_is_running,
46
46
  )
47
-
48
- try:
49
- from airflow.sdk import BaseHook
50
- except ImportError:
51
- from airflow.hooks.base import BaseHook # type: ignore[attr-defined,no-redef]
47
+ from airflow.providers.cncf.kubernetes.version_compat import BaseHook
52
48
  from airflow.utils import yaml
53
49
 
54
50
  if TYPE_CHECKING:
@@ -775,7 +771,7 @@ class AsyncKubernetesHook(KubernetesHook):
775
771
  if self.config_dict:
776
772
  self.log.debug(LOADING_KUBE_CONFIG_FILE_RESOURCE.format("config dictionary"))
777
773
  self._is_in_cluster = False
778
- await async_config.load_kube_config_from_dict(self.config_dict)
774
+ await async_config.load_kube_config_from_dict(self.config_dict, context=cluster_context)
779
775
  return async_client.ApiClient()
780
776
 
781
777
  if kubeconfig_path is not None:
@@ -22,16 +22,17 @@ import copy
22
22
  import json
23
23
  import logging
24
24
  import os
25
+ import warnings
25
26
  from collections.abc import Sequence
26
27
  from functools import cached_property
27
- from typing import TYPE_CHECKING
28
+ from typing import TYPE_CHECKING, Any, Literal
28
29
 
29
30
  from kubernetes.client import BatchV1Api, models as k8s
30
31
  from kubernetes.client.api_client import ApiClient
31
32
  from kubernetes.client.rest import ApiException
32
33
 
33
34
  from airflow.configuration import conf
34
- from airflow.exceptions import AirflowException
35
+ from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
35
36
  from airflow.providers.cncf.kubernetes.hooks.kubernetes import KubernetesHook
36
37
  from airflow.providers.cncf.kubernetes.kubernetes_helper_functions import (
37
38
  add_unique_suffix,
@@ -81,6 +82,17 @@ class KubernetesJobOperator(KubernetesPodOperator):
81
82
  Used if the parameter `wait_until_job_complete` set True.
82
83
  :param deferrable: Run operator in the deferrable mode. Note that the parameter
83
84
  `wait_until_job_complete` must be set True.
85
+ :param on_kill_propagation_policy: Whether and how garbage collection will be performed. Default is 'Foreground'.
86
+ Acceptable values are:
87
+ 'Orphan' - orphan the dependents;
88
+ 'Background' - allow the garbage collector to delete the dependents in the background;
89
+ 'Foreground' - a cascading policy that deletes all dependents in the foreground.
90
+ Default value is 'Foreground'.
91
+ :param discover_pods_retry_number: Number of time list_namespaced_pod will be performed to discover
92
+ already running pods.
93
+ :param unwrap_single: Unwrap single result from the pod. For example, when set to `True` - if the XCom
94
+ result should be `['res']`, the final result would be `'res'`. Default is True to support backward
95
+ compatibility.
84
96
  """
85
97
 
86
98
  template_fields: Sequence[str] = tuple({"job_template_file"} | set(KubernetesPodOperator.template_fields))
@@ -101,8 +113,12 @@ class KubernetesJobOperator(KubernetesPodOperator):
101
113
  wait_until_job_complete: bool = False,
102
114
  job_poll_interval: float = 10,
103
115
  deferrable: bool = conf.getboolean("operators", "default_deferrable", fallback=False),
116
+ on_kill_propagation_policy: Literal["Foreground", "Background", "Orphan"] = "Foreground",
117
+ discover_pods_retry_number: int = 3,
118
+ unwrap_single: bool = True,
104
119
  **kwargs,
105
120
  ) -> None:
121
+ self._pod = None
106
122
  super().__init__(**kwargs)
107
123
  self.job_template_file = job_template_file
108
124
  self.full_job_spec = full_job_spec
@@ -119,6 +135,22 @@ class KubernetesJobOperator(KubernetesPodOperator):
119
135
  self.wait_until_job_complete = wait_until_job_complete
120
136
  self.job_poll_interval = job_poll_interval
121
137
  self.deferrable = deferrable
138
+ self.on_kill_propagation_policy = on_kill_propagation_policy
139
+ self.discover_pods_retry_number = discover_pods_retry_number
140
+ self.unwrap_single = unwrap_single
141
+
142
+ @property
143
+ def pod(self):
144
+ warnings.warn(
145
+ "`pod` parameter is deprecated, please use `pods`",
146
+ AirflowProviderDeprecationWarning,
147
+ stacklevel=2,
148
+ )
149
+ return self.pods[0] if self.pods else None
150
+
151
+ @pod.setter
152
+ def pod(self, value):
153
+ self._pod = value
122
154
 
123
155
  @cached_property
124
156
  def _incluster_namespace(self):
@@ -167,12 +199,16 @@ class KubernetesJobOperator(KubernetesPodOperator):
167
199
  ti.xcom_push(key="job_name", value=self.job.metadata.name)
168
200
  ti.xcom_push(key="job_namespace", value=self.job.metadata.namespace)
169
201
 
170
- self.pod: k8s.V1Pod | None
171
- if self.pod is None:
172
- self.pod = self.get_or_create_pod( # must set `self.pod` for `on_kill`
173
- pod_request_obj=self.pod_request_obj,
174
- context=context,
175
- )
202
+ self.pods: Sequence[k8s.V1Pod] | None = None
203
+ if self.parallelism is None and self.pod is None:
204
+ self.pods = [
205
+ self.get_or_create_pod(
206
+ pod_request_obj=self.pod_request_obj,
207
+ context=context,
208
+ )
209
+ ]
210
+ else:
211
+ self.pods = self.get_pods(pod_request_obj=self.pod_request_obj, context=context)
176
212
 
177
213
  if self.wait_until_job_complete and self.deferrable:
178
214
  self.execute_deferrable()
@@ -180,22 +216,25 @@ class KubernetesJobOperator(KubernetesPodOperator):
180
216
 
181
217
  if self.wait_until_job_complete:
182
218
  if self.do_xcom_push:
183
- self.pod_manager.await_container_completion(
184
- pod=self.pod, container_name=self.base_container_name
185
- )
186
- self.pod_manager.await_xcom_sidecar_container_start(pod=self.pod)
187
- xcom_result = self.extract_xcom(pod=self.pod)
219
+ xcom_result = []
220
+ for pod in self.pods:
221
+ self.pod_manager.await_container_completion(
222
+ pod=pod, container_name=self.base_container_name
223
+ )
224
+ self.pod_manager.await_xcom_sidecar_container_start(pod=pod)
225
+ xcom_result.append(self.extract_xcom(pod=pod))
188
226
  self.job = self.hook.wait_until_job_complete(
189
227
  job_name=self.job.metadata.name,
190
228
  namespace=self.job.metadata.namespace,
191
229
  job_poll_interval=self.job_poll_interval,
192
230
  )
193
231
  if self.get_logs:
194
- self.pod_manager.fetch_requested_container_logs(
195
- pod=self.pod,
196
- containers=self.container_logs,
197
- follow_logs=True,
198
- )
232
+ for pod in self.pods:
233
+ self.pod_manager.fetch_requested_container_logs(
234
+ pod=pod,
235
+ containers=self.container_logs,
236
+ follow_logs=True,
237
+ )
199
238
 
200
239
  ti.xcom_push(key="job", value=self.job.to_dict())
201
240
  if self.wait_until_job_complete:
@@ -209,10 +248,10 @@ class KubernetesJobOperator(KubernetesPodOperator):
209
248
  def execute_deferrable(self):
210
249
  self.defer(
211
250
  trigger=KubernetesJobTrigger(
212
- job_name=self.job.metadata.name, # type: ignore[union-attr]
213
- job_namespace=self.job.metadata.namespace, # type: ignore[union-attr]
214
- pod_name=self.pod.metadata.name, # type: ignore[union-attr]
215
- pod_namespace=self.pod.metadata.namespace, # type: ignore[union-attr]
251
+ job_name=self.job.metadata.name,
252
+ job_namespace=self.job.metadata.namespace,
253
+ pod_names=[pod.metadata.name for pod in self.pods],
254
+ pod_namespace=self.pods[0].metadata.namespace,
216
255
  base_container_name=self.base_container_name,
217
256
  kubernetes_conn_id=self.kubernetes_conn_id,
218
257
  cluster_context=self.cluster_context,
@@ -232,20 +271,23 @@ class KubernetesJobOperator(KubernetesPodOperator):
232
271
  raise AirflowException(event["message"])
233
272
 
234
273
  if self.get_logs:
235
- pod_name = event["pod_name"]
236
- pod_namespace = event["pod_namespace"]
237
- self.pod = self.hook.get_pod(pod_name, pod_namespace)
238
- if not self.pod:
239
- raise PodNotFoundException("Could not find pod after resuming from deferral")
240
- self._write_logs(self.pod)
274
+ for pod_name in event["pod_names"]:
275
+ pod_namespace = event["pod_namespace"]
276
+ pod = self.hook.get_pod(pod_name, pod_namespace)
277
+ if not pod:
278
+ raise PodNotFoundException("Could not find pod after resuming from deferral")
279
+ self._write_logs(pod)
241
280
 
242
281
  if self.do_xcom_push:
243
- xcom_result = event["xcom_result"]
244
- if isinstance(xcom_result, str) and xcom_result.rstrip() == EMPTY_XCOM_RESULT:
245
- self.log.info("xcom result file is empty.")
246
- return None
247
- self.log.info("xcom result: \n%s", xcom_result)
248
- return json.loads(xcom_result)
282
+ xcom_results: list[Any | None] = []
283
+ for xcom_result in event["xcom_result"]:
284
+ if isinstance(xcom_result, str) and xcom_result.rstrip() == EMPTY_XCOM_RESULT:
285
+ self.log.info("xcom result file is empty.")
286
+ xcom_results.append(None)
287
+ continue
288
+ self.log.info("xcom result: \n%s", xcom_result)
289
+ xcom_results.append(json.loads(xcom_result))
290
+ return xcom_results[0] if self.unwrap_single and len(xcom_results) == 1 else xcom_results
249
291
 
250
292
  @staticmethod
251
293
  def deserialize_job_template_file(path: str) -> k8s.V1Job:
@@ -275,12 +317,11 @@ class KubernetesJobOperator(KubernetesPodOperator):
275
317
  kwargs = {
276
318
  "name": job.metadata.name,
277
319
  "namespace": job.metadata.namespace,
320
+ "propagation_policy": self.on_kill_propagation_policy,
278
321
  }
279
322
  if self.termination_grace_period is not None:
280
323
  kwargs.update(grace_period_seconds=self.termination_grace_period)
281
324
  self.job_client.delete_namespaced_job(**kwargs)
282
- if self.pod:
283
- super().on_kill()
284
325
 
285
326
  def build_job_request_obj(self, context: Context | None = None) -> k8s.V1Job:
286
327
  """
@@ -400,6 +441,29 @@ class KubernetesJobOperator(KubernetesPodOperator):
400
441
 
401
442
  return None
402
443
 
444
+ def get_pods(
445
+ self, pod_request_obj: k8s.V1Pod, context: Context, *, exclude_checked: bool = True
446
+ ) -> Sequence[k8s.V1Pod]:
447
+ """Return an already-running pods if exists."""
448
+ label_selector = self._build_find_pod_label_selector(context, exclude_checked=exclude_checked)
449
+ pod_list: Sequence[k8s.V1Pod] = []
450
+ retry_number: int = 0
451
+
452
+ while len(pod_list) != self.parallelism or retry_number <= self.discover_pods_retry_number:
453
+ pod_list = self.client.list_namespaced_pod(
454
+ namespace=pod_request_obj.metadata.namespace,
455
+ label_selector=label_selector,
456
+ ).items
457
+ retry_number += 1
458
+
459
+ if len(pod_list) == 0:
460
+ raise AirflowException(f"No pods running with labels {label_selector}")
461
+
462
+ for pod_instance in pod_list:
463
+ self.log_matching_pod(pod=pod_instance, context=context)
464
+
465
+ return pod_list
466
+
403
467
 
404
468
  class KubernetesDeleteJobOperator(BaseOperator):
405
469
  """
@@ -68,7 +68,7 @@ from airflow.providers.cncf.kubernetes.kubernetes_helper_functions import (
68
68
  )
69
69
  from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator
70
70
  from airflow.providers.cncf.kubernetes.triggers.pod import KubernetesPodTrigger
71
- from airflow.providers.cncf.kubernetes.utils import xcom_sidecar # type: ignore[attr-defined]
71
+ from airflow.providers.cncf.kubernetes.utils import xcom_sidecar
72
72
  from airflow.providers.cncf.kubernetes.utils.pod_manager import (
73
73
  EMPTY_XCOM_RESULT,
74
74
  OnFinishAction,
@@ -80,11 +80,10 @@ from airflow.providers.cncf.kubernetes.utils.pod_manager import (
80
80
  container_is_succeeded,
81
81
  get_container_termination_message,
82
82
  )
83
- from airflow.providers.cncf.kubernetes.version_compat import BaseOperator
83
+ from airflow.providers.cncf.kubernetes.version_compat import XCOM_RETURN_KEY, BaseOperator
84
84
  from airflow.settings import pod_mutation_hook
85
85
  from airflow.utils import yaml
86
86
  from airflow.utils.helpers import prune_dict, validate_key
87
- from airflow.utils.xcom import XCOM_RETURN_KEY
88
87
  from airflow.version import version as airflow_version
89
88
 
90
89
  if TYPE_CHECKING:
@@ -579,10 +578,15 @@ class KubernetesPodOperator(BaseOperator):
579
578
  pod = self.find_pod(pod_request_obj.metadata.namespace, context=context)
580
579
  if pod:
581
580
  # If pod is terminated then delete the pod an create a new as not possible to get xcom
582
- pod_phase = (
583
- pod.status.phase if hasattr(pod, "status") and hasattr(pod.status, "phase") else None
584
- )
585
- if pod_phase and pod_phase not in (PodPhase.SUCCEEDED, PodPhase.FAILED):
581
+ pod_phase = pod.status.phase if pod.status and pod.status.phase else None
582
+ pod_reason = pod.status.reason.lower() if pod.status and pod.status.reason else ""
583
+ if pod_phase not in (PodPhase.SUCCEEDED, PodPhase.FAILED) and pod_reason != "evicted":
584
+ self.log.info(
585
+ "Reusing existing pod '%s' (phase=%s, reason=%s) since it is not terminated or evicted.",
586
+ pod.metadata.name,
587
+ pod_phase,
588
+ pod_reason,
589
+ )
586
590
  return pod
587
591
 
588
592
  self.log.info(
@@ -604,20 +608,18 @@ class KubernetesPodOperator(BaseOperator):
604
608
 
605
609
  def await_pod_start(self, pod: k8s.V1Pod) -> None:
606
610
  try:
607
- loop = asyncio.get_event_loop()
608
- events_task = asyncio.ensure_future(
609
- self.pod_manager.watch_pod_events(pod, self.startup_check_interval_seconds)
610
- )
611
- loop.run_until_complete(
612
- self.pod_manager.await_pod_start(
611
+
612
+ async def _await_pod_start():
613
+ events_task = self.pod_manager.watch_pod_events(pod, self.startup_check_interval_seconds)
614
+ pod_start_task = self.pod_manager.await_pod_start(
613
615
  pod=pod,
614
616
  schedule_timeout=self.schedule_timeout_seconds,
615
617
  startup_timeout=self.startup_timeout_seconds,
616
618
  check_interval=self.startup_check_interval_seconds,
617
619
  )
618
- )
619
- loop.run_until_complete(events_task)
620
- loop.close()
620
+ await asyncio.gather(pod_start_task, events_task)
621
+
622
+ asyncio.run(_await_pod_start())
621
623
  except PodLaunchFailedException:
622
624
  if self.log_events_on_failure:
623
625
  self._read_pod_events(pod, reraise=False)
@@ -106,10 +106,9 @@ class KubernetesResourceBaseOperator(BaseOperator):
106
106
  group = api_version[0 : api_version.find("/")]
107
107
  version = api_version[api_version.find("/") + 1 :]
108
108
 
109
- namespace = None
110
- if body.get("metadata"):
111
- metadata: dict = body.get("metadata", None)
112
- namespace = metadata.get("namespace", None)
109
+ metadata = body.get("metadata", {}) if body else None
110
+ namespace = metadata.get("namespace") if metadata else None
111
+
113
112
  if namespace is None:
114
113
  namespace = self.get_namespace()
115
114