apache-airflow-providers-cncf-kubernetes 10.4.3rc1__tar.gz → 10.5.0rc2__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.

Potentially problematic release.


This version of apache-airflow-providers-cncf-kubernetes might be problematic. Click here for more details.

Files changed (158) hide show
  1. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/PKG-INFO +8 -8
  2. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/README.rst +4 -4
  3. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/changelog.rst +37 -0
  4. apache_airflow_providers_cncf_kubernetes-10.5.0rc2/docs/commits.rst +35 -0
  5. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/index.rst +3 -3
  6. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/operators.rst +35 -1
  7. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/provider.yaml +9 -3
  8. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/pyproject.toml +4 -4
  9. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/__init__.py +3 -3
  10. apache_airflow_providers_cncf_kubernetes-10.5.0rc2/src/airflow/providers/cncf/kubernetes/decorators/kubernetes_cmd.py +123 -0
  11. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py +2 -3
  12. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/get_provider_info.py +6 -2
  13. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/hooks/kubernetes.py +11 -2
  14. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/pod.py +11 -2
  15. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/pod_generator.py +2 -36
  16. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/template_rendering.py +17 -0
  17. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/utils/pod_manager.py +54 -13
  18. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/version_compat.py +0 -1
  19. apache_airflow_providers_cncf_kubernetes-10.5.0rc2/tests/system/cncf/kubernetes/example_kubernetes_cmd_decorator.py +76 -0
  20. apache_airflow_providers_cncf_kubernetes-10.5.0rc2/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py +126 -0
  21. apache_airflow_providers_cncf_kubernetes-10.5.0rc2/tests/unit/cncf/kubernetes/decorators/test_kubernetes_cmd.py +390 -0
  22. apache_airflow_providers_cncf_kubernetes-10.5.0rc2/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py +280 -0
  23. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/test_pod.py +16 -0
  24. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/test_pod_generator.py +7 -31
  25. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/test_template_rendering.py +36 -2
  26. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/utils/test_pod_manager.py +59 -7
  27. apache_airflow_providers_cncf_kubernetes-10.4.3rc1/docs/commits.rst +0 -1537
  28. apache_airflow_providers_cncf_kubernetes-10.4.3rc1/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py +0 -328
  29. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/.latest-doc-only-change.txt +0 -0
  30. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/cli-ref.rst +0 -0
  31. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/conf.py +0 -0
  32. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/configurations-ref.rst +0 -0
  33. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/connections/kubernetes.rst +0 -0
  34. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/img/arch-diag-kubernetes.png +0 -0
  35. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/img/arch-diag-kubernetes2.png +0 -0
  36. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/img/k8s-failed-pod.png +0 -0
  37. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/img/k8s-happy-path.png +0 -0
  38. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/installing-providers-from-sources.rst +0 -0
  39. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/integration-logos/Kubernetes.png +0 -0
  40. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/integration-logos/Spark-On-Kubernetes.png +0 -0
  41. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/kubernetes_executor.rst +0 -0
  42. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/local_kubernetes_executor.rst +0 -0
  43. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/redirects.txt +0 -0
  44. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/security.rst +0 -0
  45. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/__init__.py +0 -0
  46. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/__init__.py +0 -0
  47. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/__init__.py +0 -0
  48. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/LICENSE +0 -0
  49. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/backcompat/__init__.py +0 -0
  50. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/backcompat/backwards_compat_converters.py +0 -0
  51. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/callbacks.py +0 -0
  52. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/cli/__init__.py +0 -0
  53. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/cli/kubernetes_command.py +0 -0
  54. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/decorators/__init__.py +0 -0
  55. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/decorators/kubernetes.py +0 -0
  56. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/exceptions.py +0 -0
  57. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/executors/__init__.py +0 -0
  58. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py +0 -0
  59. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_types.py +0 -0
  60. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py +0 -0
  61. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/hooks/__init__.py +0 -0
  62. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/k8s_model.py +0 -0
  63. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/kube_client.py +0 -0
  64. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/kube_config.py +0 -0
  65. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/kubernetes_executor_templates/__init__.py +0 -0
  66. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/kubernetes_executor_templates/basic_template.yaml +0 -0
  67. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/kubernetes_helper_functions.py +0 -0
  68. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/__init__.py +0 -0
  69. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/custom_object_launcher.py +0 -0
  70. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/job.py +0 -0
  71. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/kueue.py +0 -0
  72. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/resource.py +0 -0
  73. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/spark_kubernetes.py +0 -0
  74. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/__init__.py +0 -0
  75. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_image_template.yaml +0 -0
  76. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_volume_template.yaml +0 -0
  77. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/git_sync_template.yaml +0 -0
  78. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/python_kubernetes_script.jinja2 +0 -0
  79. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/python_kubernetes_script.py +0 -0
  80. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/resource_convert/__init__.py +0 -0
  81. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/resource_convert/configmap.py +0 -0
  82. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/resource_convert/env_variable.py +0 -0
  83. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/resource_convert/secret.py +0 -0
  84. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/secret.py +0 -0
  85. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/sensors/__init__.py +0 -0
  86. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/sensors/spark_kubernetes.py +0 -0
  87. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/triggers/__init__.py +0 -0
  88. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/triggers/job.py +0 -0
  89. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/triggers/pod.py +0 -0
  90. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/utils/__init__.py +0 -0
  91. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/utils/delete_from.py +0 -0
  92. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/utils/k8s_resource_iterator.py +0 -0
  93. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/utils/xcom_sidecar.py +0 -0
  94. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/conftest.py +0 -0
  95. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/__init__.py +0 -0
  96. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/__init__.py +0 -0
  97. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/__init__.py +0 -0
  98. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_kubernetes.py +0 -0
  99. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_kubernetes_async.py +0 -0
  100. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_kubernetes_decorator.py +0 -0
  101. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_kubernetes_job.py +0 -0
  102. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_kubernetes_kueue.py +0 -0
  103. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_kubernetes_resource.py +0 -0
  104. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_spark_kubernetes.py +0 -0
  105. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_spark_kubernetes_spark_pi.yaml +0 -0
  106. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/spark_job_template.yaml +0 -0
  107. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/__init__.py +0 -0
  108. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/__init__.py +0 -0
  109. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/__init__.py +0 -0
  110. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/backcompat/__init__.py +0 -0
  111. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/backcompat/test_backwards_compat_converters.py +0 -0
  112. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/cli/__init__.py +0 -0
  113. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/cli/test_kubernetes_command.py +0 -0
  114. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/conftest.py +0 -0
  115. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/__init__.py +0 -0
  116. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/executor/__init__.py +0 -0
  117. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/executor/basic_template.yaml +0 -0
  118. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/kube_config +0 -0
  119. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/pods/__init__.py +0 -0
  120. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/pods/generator_base.yaml +0 -0
  121. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/pods/generator_base_with_secrets.yaml +0 -0
  122. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/pods/template.yaml +0 -0
  123. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/spark/__init__.py +0 -0
  124. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/spark/application_template.yaml +0 -0
  125. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/spark/application_test.json +0 -0
  126. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/spark/application_test.yaml +0 -0
  127. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/spark/application_test_with_no_name_from_config.json +0 -0
  128. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/spark/application_test_with_no_name_from_config.yaml +0 -0
  129. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/decorators/__init__.py +0 -0
  130. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/executors/__init__.py +0 -0
  131. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py +0 -0
  132. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/executors/test_local_kubernetes_executor.py +0 -0
  133. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/hooks/__init__.py +0 -0
  134. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py +0 -0
  135. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/log_handlers/__init__.py +0 -0
  136. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/log_handlers/test_log_handlers.py +0 -0
  137. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/models/__init__.py +0 -0
  138. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/models/test_secret.py +0 -0
  139. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/__init__.py +0 -0
  140. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/test_custom_object_launcher.py +0 -0
  141. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/test_job.py +0 -0
  142. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/test_kueue.py +0 -0
  143. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/test_resource.py +0 -0
  144. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py +0 -0
  145. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/resource_convert/__init__.py +0 -0
  146. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/resource_convert/test_configmap.py +0 -0
  147. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/resource_convert/test_env_variable.py +0 -0
  148. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/resource_convert/test_secret.py +0 -0
  149. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/sensors/__init__.py +0 -0
  150. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/sensors/test_spark_kubernetes.py +0 -0
  151. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/test_callbacks.py +0 -0
  152. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/test_client.py +0 -0
  153. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/test_kubernetes_helper_functions.py +0 -0
  154. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/triggers/__init__.py +0 -0
  155. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/triggers/test_job.py +0 -0
  156. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/triggers/test_pod.py +0 -0
  157. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/utils/__init__.py +0 -0
  158. {apache_airflow_providers_cncf_kubernetes-10.4.3rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/utils/test_k8s_resource_iterator.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.3rc1
3
+ Version: 10.5.0rc2
4
4
  Summary: Provider package apache-airflow-providers-cncf-kubernetes for Apache Airflow
5
5
  Keywords: airflow-provider,cncf.kubernetes,airflow,integration
6
6
  Author-email: Apache Software Foundation <dev@airflow.apache.org>
@@ -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.0rc0
24
+ Requires-Dist: apache-airflow>=2.10.0rc1
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.3/changelog.html
31
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.3
30
+ Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.5.0/changelog.html
31
+ Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.5.0
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.3``
62
+ Release: ``10.5.0``
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.3/>`_.
75
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.5.0/>`_.
76
76
 
77
77
  Installation
78
78
  ------------
@@ -90,7 +90,7 @@ Requirements
90
90
  PIP package Version required
91
91
  ====================== =====================
92
92
  ``aiofiles`` ``>=23.2.0``
93
- ``apache-airflow`` ``>=2.9.0``
93
+ ``apache-airflow`` ``>=2.10.0``
94
94
  ``asgiref`` ``>=3.5.2``
95
95
  ``cryptography`` ``>=41.0.0``
96
96
  ``kubernetes`` ``>=29.0.0,<=31.0.0``
@@ -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.3/changelog.html>`_.
101
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.5.0/changelog.html>`_.
102
102
 
@@ -23,7 +23,7 @@
23
23
 
24
24
  Package ``apache-airflow-providers-cncf-kubernetes``
25
25
 
26
- Release: ``10.4.3``
26
+ Release: ``10.5.0``
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.3/>`_.
39
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.5.0/>`_.
40
40
 
41
41
  Installation
42
42
  ------------
@@ -54,7 +54,7 @@ Requirements
54
54
  PIP package Version required
55
55
  ====================== =====================
56
56
  ``aiofiles`` ``>=23.2.0``
57
- ``apache-airflow`` ``>=2.9.0``
57
+ ``apache-airflow`` ``>=2.10.0``
58
58
  ``asgiref`` ``>=3.5.2``
59
59
  ``cryptography`` ``>=41.0.0``
60
60
  ``kubernetes`` ``>=29.0.0,<=31.0.0``
@@ -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.3/changelog.html>`_.
65
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.5.0/changelog.html>`_.
@@ -28,6 +28,43 @@ Changelog
28
28
  ---------
29
29
 
30
30
 
31
+ 10.5.0
32
+ ......
33
+
34
+ .. note::
35
+ This release of provider is only available for Airflow 2.10+ as explained in the
36
+ Apache Airflow providers support policy <https://github.com/apache/airflow/blob/main/PROVIDERS.rst#minimum-supported-version-of-airflow-for-community-managed-providers>_.
37
+
38
+ Features
39
+ ~~~~~~~~
40
+
41
+ * ``Add fast fail for ErrImagePull and InvalidImageName for KubernetesPodOperator (#49867)``
42
+ * ``KubernetesPodOperator uses different timeouts to check for schedule timeout and startup timeout (#49784)``
43
+ * ``Add configurable automountServiceAccountToken for the KubernetesPodOperator (#50223)``
44
+ * ``Add 'test_connection' method to 'KubernetesHook' (#47881)``
45
+ * ``Add '@task.kuberenetes_cmd' (#46913)``
46
+
47
+ Bug Fixes
48
+ ~~~~~~~~~
49
+
50
+ * ``Pass workload to KubernetesExecutor using command args instead of init container (#50448)``
51
+ * ``Fix KubernetesPodOperator AutomountServiceAccountToken from Pod Template (#50800)``
52
+ * ``Fix broken imports of cncf.kubernetes for Airflow 2 (#50651)``
53
+
54
+ Misc
55
+ ~~~~
56
+
57
+ * ``Move SQS message queue to Amazon provider (#50057)``
58
+ * ``Remove AIRFLOW_2_10_PLUS conditions (#49877)``
59
+ * ``Bump min Airflow version in providers to 2.10 (#49843)``
60
+
61
+ .. Below changes are excluded from the changelog. Move them to
62
+ appropriate section above if needed. Do not delete the lines(!):
63
+ * ``Update description of provider.yaml dependencies (#50231)``
64
+ * ``Avoid committing history for providers (#49907)``
65
+ * ``capitalize the term airflow (#49450)``
66
+ * ``Prepare release for providers May 2025 (#50531)``
67
+
31
68
  10.4.3
32
69
  ......
33
70
 
@@ -0,0 +1,35 @@
1
+
2
+ .. Licensed to the Apache Software Foundation (ASF) under one
3
+ or more contributor license agreements. See the NOTICE file
4
+ distributed with this work for additional information
5
+ regarding copyright ownership. The ASF licenses this file
6
+ to you under the Apache License, Version 2.0 (the
7
+ "License"); you may not use this file except in compliance
8
+ with the License. You may obtain a copy of the License at
9
+
10
+ .. http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ .. Unless required by applicable law or agreed to in writing,
13
+ software distributed under the License is distributed on an
14
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ KIND, either express or implied. See the License for the
16
+ specific language governing permissions and limitations
17
+ under the License.
18
+
19
+ .. NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE OVERWRITTEN!
20
+
21
+ .. IF YOU WANT TO MODIFY THIS FILE, YOU SHOULD MODIFY THE TEMPLATE
22
+ `PROVIDER_COMMITS_TEMPLATE.rst.jinja2` IN the `dev/breeze/src/airflow_breeze/templates` DIRECTORY
23
+
24
+ .. THE REMAINDER OF THE FILE IS AUTOMATICALLY GENERATED. IT WILL BE OVERWRITTEN!
25
+
26
+ Package apache-airflow-providers-cncf-kubernetes
27
+ ------------------------------------------------------
28
+
29
+ `Kubernetes <https://kubernetes.io/>`__
30
+
31
+
32
+ This is detailed commit list of changes for versions provider package: ``cncf.kubernetes``.
33
+ For high-level changelog, see :doc:`package information including changelog <index>`.
34
+
35
+ .. airflow-providers-commits::
@@ -87,7 +87,7 @@ apache-airflow-providers-cncf-kubernetes package
87
87
  `Kubernetes <https://kubernetes.io/>`__
88
88
 
89
89
 
90
- Release: 10.4.3
90
+ Release: 10.5.0
91
91
 
92
92
  Provider package
93
93
  ----------------
@@ -105,13 +105,13 @@ For the minimum Airflow version supported, see ``Requirements`` below.
105
105
  Requirements
106
106
  ------------
107
107
 
108
- The minimum Apache Airflow version supported by this provider distribution is ``2.9.0``.
108
+ The minimum Apache Airflow version supported by this provider distribution is ``2.10.0``.
109
109
 
110
110
  ====================== =====================
111
111
  PIP package Version required
112
112
  ====================== =====================
113
113
  ``aiofiles`` ``>=23.2.0``
114
- ``apache-airflow`` ``>=2.9.0``
114
+ ``apache-airflow`` ``>=2.10.0``
115
115
  ``asgiref`` ``>=3.5.2``
116
116
  ``cryptography`` ``>=41.0.0``
117
117
  ``kubernetes`` ``>=29.0.0,<=31.0.0``
@@ -182,6 +182,40 @@ Also for this action you can use operator in the deferrable mode:
182
182
  :start-after: [START howto_operator_k8s_write_xcom_async]
183
183
  :end-before: [END howto_operator_k8s_write_xcom_async]
184
184
 
185
+
186
+ Run command in KubernetesPodOperator from TaskFlow
187
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
188
+ With the usage of the ``@task.kubernetes_cmd`` decorator, you can run a command returned by a function
189
+ in a ``KubernetesPodOperator`` simplifying it's connection to the TaskFlow.
190
+
191
+ Difference between ``@task.kubernetes`` and ``@task.kubernetes_cmd``
192
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
193
+ ``@task.kubernetes`` decorator is designed to run a Python function inside a Kubernetes pod using KPO.
194
+ It does this by serializing the function into a temporary Python script that is executed inside the container.
195
+ This is well-suited for cases where you want to isolate Python code execution and manage complex dependencies,
196
+ as described in the :doc:`TaskFlow documentation <apache-airflow:tutorial/taskflow>`.
197
+
198
+ In contrast, ``@task.kubernetes_cmd`` decorator allows the decorated function to return
199
+ a shell command (as a list of strings), which is then passed as cmds or arguments to
200
+ ``KubernetesPodOperator``.
201
+ This enables executing arbitrary commands available inside a Kubernetes pod --
202
+ without needing to wrap it in Python code.
203
+
204
+ A key benefit here is that Python excels at composing and templating these commands.
205
+ Shell commands can be dynamically generated using Python's string formatting, templating,
206
+ extra function calls and logic. This makes it a flexible tool for orchestrating complex pipelines
207
+ where the task is to invoke CLI-based operations in containers without the need to leave
208
+ a TaskFlow context.
209
+
210
+ How does this decorator work?
211
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
212
+ See the following examples on how the decorator works:
213
+
214
+ .. exampleinclude:: /../tests/system/cncf/kubernetes/example_kubernetes_cmd_decorator.py
215
+ :language: python
216
+ :start-after: [START howto_decorator_kubernetes_cmd]
217
+ :end-before: [END howto_decorator_kubernetes_cmd]
218
+
185
219
  Include error message in email alert
186
220
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
187
221
 
@@ -285,7 +319,7 @@ Never use environment variables to pass secrets (for example connection authenti
285
319
  Kubernetes Pod Operator. Such environment variables will be visible to anyone who has access
286
320
  to see and describe PODs in Kubernetes. Instead, pass your secrets via native Kubernetes ``Secrets`` or
287
321
  use Connections and Variables from Airflow. For the latter, you need to have ``apache-airflow`` package
288
- installed in your image in the same version as airflow you run your Kubernetes Pod Operator from).
322
+ installed in your image in the same version as Airflow you run your Kubernetes Pod Operator from).
289
323
 
290
324
  Reference
291
325
  ^^^^^^^^^
@@ -22,9 +22,13 @@ description: |
22
22
  `Kubernetes <https://kubernetes.io/>`__
23
23
 
24
24
  state: ready
25
- source-date-epoch: 1744788926
26
- # note that those versions are maintained by release manager - do not update them manually
25
+ source-date-epoch: 1747132113
26
+ # Note that those versions are maintained by release manager - do not update them manually
27
+ # with the exception of case where other provider in sources has >= new provider version.
28
+ # In such case adding >= NEW_VERSION and bumping to NEW_VERSION in a provider have
29
+ # to be done in the same PR
27
30
  versions:
31
+ - 10.5.0
28
32
  - 10.4.3
29
33
  - 10.4.2
30
34
  - 10.4.1
@@ -147,6 +151,8 @@ connection-types:
147
151
  task-decorators:
148
152
  - class-name: airflow.providers.cncf.kubernetes.decorators.kubernetes.kubernetes_task
149
153
  name: kubernetes
154
+ - class-name: airflow.providers.cncf.kubernetes.decorators.kubernetes_cmd.kubernetes_cmd_task
155
+ name: kubernetes_cmd
150
156
 
151
157
  config:
152
158
  local_kubernetes_executor:
@@ -370,4 +376,4 @@ config:
370
376
  default: "0"
371
377
 
372
378
  executors:
373
- - airflow.providers.cncf.kubernetes.kubernetes_executor.KubernetesExecutor
379
+ - airflow.providers.cncf.kubernetes.executors.kubernetes_executor.KubernetesExecutor
@@ -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.3.rc1"
28
+ version = "10.5.0rc2"
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.0rc0",
61
+ "apache-airflow>=2.10.0rc1",
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.3"
116
- "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.4.3/changelog.html"
115
+ "Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.5.0"
116
+ "Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.5.0/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,11 +29,11 @@ from airflow import __version__ as airflow_version
29
29
 
30
30
  __all__ = ["__version__"]
31
31
 
32
- __version__ = "10.4.3"
32
+ __version__ = "10.5.0"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
- "2.9.0"
35
+ "2.10.0"
36
36
  ):
37
37
  raise RuntimeError(
38
- f"The package `apache-airflow-providers-cncf-kubernetes:{__version__}` needs Apache Airflow 2.9.0+"
38
+ f"The package `apache-airflow-providers-cncf-kubernetes:{__version__}` needs Apache Airflow 2.10.0+"
39
39
  )
@@ -0,0 +1,123 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+ from __future__ import annotations
18
+
19
+ import warnings
20
+ from collections.abc import Sequence
21
+ from typing import TYPE_CHECKING, Callable
22
+
23
+ from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
24
+
25
+ if AIRFLOW_V_3_0_PLUS:
26
+ from airflow.sdk.bases.decorator import DecoratedOperator, TaskDecorator, task_decorator_factory
27
+ else:
28
+ from airflow.decorators.base import ( # type: ignore[no-redef]
29
+ DecoratedOperator,
30
+ TaskDecorator,
31
+ task_decorator_factory,
32
+ )
33
+ from airflow.providers.cncf.kubernetes.operators.pod import KubernetesPodOperator
34
+ from airflow.utils.context import context_merge
35
+ from airflow.utils.operator_helpers import determine_kwargs
36
+
37
+ if TYPE_CHECKING:
38
+ from airflow.utils.context import Context
39
+
40
+
41
+ class _KubernetesCmdDecoratedOperator(DecoratedOperator, KubernetesPodOperator):
42
+ custom_operator_name = "@task.kubernetes_cmd"
43
+
44
+ template_fields: Sequence[str] = KubernetesPodOperator.template_fields
45
+ overwrite_rtif_after_execution: bool = True
46
+
47
+ def __init__(self, *, python_callable: Callable, args_only: bool = False, **kwargs) -> None:
48
+ self.args_only = args_only
49
+
50
+ cmds = kwargs.pop("cmds", None)
51
+ arguments = kwargs.pop("arguments", None)
52
+
53
+ if cmds is not None or arguments is not None:
54
+ warnings.warn(
55
+ f"The `cmds` and `arguments` are unused in {self.custom_operator_name} decorator. "
56
+ "You should return a list of commands or image entrypoint arguments with "
57
+ "args_only=True from the python_callable.",
58
+ UserWarning,
59
+ stacklevel=3,
60
+ )
61
+
62
+ # If the name was not provided, we generate operator name from the python_callable
63
+ # we also instruct operator to add a random suffix to avoid collisions by default
64
+ op_name = kwargs.pop("name", f"k8s-airflow-pod-{python_callable.__name__}")
65
+ random_name_suffix = kwargs.pop("random_name_suffix", True)
66
+
67
+ super().__init__(
68
+ python_callable=python_callable,
69
+ name=op_name,
70
+ random_name_suffix=random_name_suffix,
71
+ cmds=None,
72
+ arguments=None,
73
+ **kwargs,
74
+ )
75
+
76
+ def execute(self, context: Context):
77
+ generated = self._generate_cmds(context)
78
+ if self.args_only:
79
+ self.cmds = []
80
+ self.arguments = generated
81
+ else:
82
+ self.cmds = generated
83
+ self.arguments = []
84
+ context["ti"].render_templates() # type: ignore[attr-defined]
85
+ return super().execute(context)
86
+
87
+ def _generate_cmds(self, context: Context) -> list[str]:
88
+ context_merge(context, self.op_kwargs)
89
+ kwargs = determine_kwargs(self.python_callable, self.op_args, context)
90
+ generated_cmds = self.python_callable(*self.op_args, **kwargs)
91
+ func_name = self.python_callable.__name__
92
+ if not isinstance(generated_cmds, list):
93
+ raise TypeError(
94
+ f"Expected python_callable to return a list of strings, but got {type(generated_cmds)}"
95
+ )
96
+ if not all(isinstance(cmd, str) for cmd in generated_cmds):
97
+ raise TypeError(f"Expected {func_name} to return a list of strings, but got {generated_cmds}")
98
+ if not generated_cmds:
99
+ raise ValueError(f"The {func_name} returned an empty list of commands")
100
+
101
+ return generated_cmds
102
+
103
+
104
+ def kubernetes_cmd_task(
105
+ python_callable: Callable | None = None,
106
+ **kwargs,
107
+ ) -> TaskDecorator:
108
+ """
109
+ Kubernetes cmd operator decorator.
110
+
111
+ This wraps a function which should return command to be executed
112
+ in K8s using KubernetesPodOperator. The function should return a list of strings.
113
+ If args_only is set to True, the function should return a list of arguments for
114
+ container default command. Also accepts any argument that KubernetesPodOperator
115
+ will via ``kwargs``. Can be reused in a single DAG.
116
+
117
+ :param python_callable: Function to decorate
118
+ """
119
+ return task_decorator_factory(
120
+ python_callable=python_callable,
121
+ decorated_operator_class=_KubernetesCmdDecoratedOperator,
122
+ **kwargs,
123
+ )
@@ -398,8 +398,8 @@ class AirflowKubernetesScheduler(LoggingMixin):
398
398
  "python",
399
399
  "-m",
400
400
  "airflow.sdk.execution_time.execute_workload",
401
- "--json-path",
402
- "/tmp/execute/input.json",
401
+ "--json-string",
402
+ ser_input,
403
403
  ]
404
404
  else:
405
405
  raise ValueError(
@@ -427,7 +427,6 @@ class AirflowKubernetesScheduler(LoggingMixin):
427
427
  date=None,
428
428
  run_id=run_id,
429
429
  args=list(command),
430
- content_json_for_volume=ser_input,
431
430
  pod_override_object=kube_executor_config,
432
431
  base_worker_pod=base_worker_pod,
433
432
  with_mutation_hook=True,
@@ -85,7 +85,11 @@ def get_provider_info():
85
85
  {
86
86
  "class-name": "airflow.providers.cncf.kubernetes.decorators.kubernetes.kubernetes_task",
87
87
  "name": "kubernetes",
88
- }
88
+ },
89
+ {
90
+ "class-name": "airflow.providers.cncf.kubernetes.decorators.kubernetes_cmd.kubernetes_cmd_task",
91
+ "name": "kubernetes_cmd",
92
+ },
89
93
  ],
90
94
  "config": {
91
95
  "local_kubernetes_executor": {
@@ -275,5 +279,5 @@ def get_provider_info():
275
279
  },
276
280
  },
277
281
  },
278
- "executors": ["airflow.providers.cncf.kubernetes.kubernetes_executor.KubernetesExecutor"],
282
+ "executors": ["airflow.providers.cncf.kubernetes.executors.kubernetes_executor.KubernetesExecutor"],
279
283
  }
@@ -140,7 +140,8 @@ class KubernetesHook(BaseHook, PodOperatorHookProtocol):
140
140
 
141
141
  def __init__(
142
142
  self,
143
- conn_id: str | None = default_conn_name,
143
+ conn_id: str | None = None,
144
+ kubernetes_conn_id: str | None = default_conn_name,
144
145
  client_configuration: client.Configuration | None = None,
145
146
  cluster_context: str | None = None,
146
147
  config_file: str | None = None,
@@ -149,7 +150,7 @@ class KubernetesHook(BaseHook, PodOperatorHookProtocol):
149
150
  disable_tcp_keepalive: bool | None = None,
150
151
  ) -> None:
151
152
  super().__init__()
152
- self.conn_id = conn_id
153
+ self.conn_id = conn_id or kubernetes_conn_id
153
154
  self.client_configuration = client_configuration
154
155
  self.cluster_context = cluster_context
155
156
  self.config_file = config_file
@@ -706,6 +707,14 @@ class KubernetesHook(BaseHook, PodOperatorHookProtocol):
706
707
 
707
708
  return list(yaml.safe_load_all(response.text))
708
709
 
710
+ def test_connection(self):
711
+ try:
712
+ conn = self.get_conn()
713
+ version: client.VersionInfo = client.VersionApi(conn).get_code()
714
+ return True, f"Connection successful. Version Info: {version.to_dict()}"
715
+ except Exception as e:
716
+ return False, str(e)
717
+
709
718
 
710
719
  def _get_bool(val) -> bool | None:
711
720
  """Convert val to bool if can be done with certainty; if we cannot infer intention we return None."""
@@ -157,8 +157,9 @@ class KubernetesPodOperator(BaseOperator):
157
157
  :param reattach_on_restart: if the worker dies while the pod is running, reattach and monitor
158
158
  during the next try. If False, always create a new pod for each try.
159
159
  :param labels: labels to apply to the Pod. (templated)
160
- :param startup_timeout_seconds: timeout in seconds to startup the pod.
160
+ :param startup_timeout_seconds: timeout in seconds to startup the pod after pod was scheduled.
161
161
  :param startup_check_interval_seconds: interval in seconds to check if the pod has already started
162
+ :param schedule_timeout_seconds: timeout in seconds to schedule pod in cluster.
162
163
  :param get_logs: get the stdout of the base container as logs of the tasks.
163
164
  :param init_container_logs: list of init containers whose logs will be published to stdout
164
165
  Takes a sequence of containers, a single container name or True. If True,
@@ -180,6 +181,7 @@ class KubernetesPodOperator(BaseOperator):
180
181
  If more than one secret is required, provide a
181
182
  comma separated list: secret_a,secret_b
182
183
  :param service_account_name: Name of the service account
184
+ :param automount_service_account_token: indicates whether pods running as this service account should have an API token automatically mounted
183
185
  :param hostnetwork: If True enable host networking on the pod.
184
186
  :param host_aliases: A list of host aliases to apply to the containers in the pod.
185
187
  :param tolerations: A list of kubernetes tolerations.
@@ -289,6 +291,7 @@ class KubernetesPodOperator(BaseOperator):
289
291
  reattach_on_restart: bool = True,
290
292
  startup_timeout_seconds: int = 120,
291
293
  startup_check_interval_seconds: int = 5,
294
+ schedule_timeout_seconds: int | None = None,
292
295
  get_logs: bool = True,
293
296
  base_container_name: str | None = None,
294
297
  base_container_status_polling_interval: float = 1,
@@ -302,6 +305,7 @@ class KubernetesPodOperator(BaseOperator):
302
305
  node_selector: dict | None = None,
303
306
  image_pull_secrets: list[k8s.V1LocalObjectReference] | None = None,
304
307
  service_account_name: str | None = None,
308
+ automount_service_account_token: bool | None = None,
305
309
  hostnetwork: bool = False,
306
310
  host_aliases: list[k8s.V1HostAlias] | None = None,
307
311
  tolerations: list[k8s.V1Toleration] | None = None,
@@ -347,6 +351,8 @@ class KubernetesPodOperator(BaseOperator):
347
351
  self.labels = labels or {}
348
352
  self.startup_timeout_seconds = startup_timeout_seconds
349
353
  self.startup_check_interval_seconds = startup_check_interval_seconds
354
+ # New parameter startup_timeout_seconds adds breaking change, to handle this as smooth as possible just reuse startup time
355
+ self.schedule_timeout_seconds = schedule_timeout_seconds or startup_timeout_seconds
350
356
  env_vars = convert_env_vars(env_vars) if env_vars else []
351
357
  self.env_vars = env_vars
352
358
  pod_runtime_info_envs = (
@@ -380,6 +386,7 @@ class KubernetesPodOperator(BaseOperator):
380
386
  self.config_file = config_file
381
387
  self.image_pull_secrets = convert_image_pull_secrets(image_pull_secrets) if image_pull_secrets else []
382
388
  self.service_account_name = service_account_name
389
+ self.automount_service_account_token = automount_service_account_token
383
390
  self.hostnetwork = hostnetwork
384
391
  self.host_aliases = host_aliases
385
392
  self.tolerations = (
@@ -574,8 +581,9 @@ class KubernetesPodOperator(BaseOperator):
574
581
  try:
575
582
  self.pod_manager.await_pod_start(
576
583
  pod=pod,
584
+ schedule_timeout=self.schedule_timeout_seconds,
577
585
  startup_timeout=self.startup_timeout_seconds,
578
- startup_check_interval=self.startup_check_interval_seconds,
586
+ check_interval=self.startup_check_interval_seconds,
579
587
  )
580
588
  except PodLaunchFailedException:
581
589
  if self.log_events_on_failure:
@@ -1175,6 +1183,7 @@ class KubernetesPodOperator(BaseOperator):
1175
1183
  ],
1176
1184
  image_pull_secrets=self.image_pull_secrets,
1177
1185
  service_account_name=self.service_account_name,
1186
+ automount_service_account_token=self.automount_service_account_token,
1178
1187
  host_network=self.hostnetwork,
1179
1188
  hostname=self.hostname,
1180
1189
  subdomain=self.subdomain,
@@ -34,7 +34,7 @@ from functools import reduce
34
34
  from typing import TYPE_CHECKING
35
35
 
36
36
  from dateutil import parser
37
- from kubernetes.client import V1EmptyDirVolumeSource, V1Volume, V1VolumeMount, models as k8s
37
+ from kubernetes.client import models as k8s
38
38
  from kubernetes.client.api_client import ApiClient
39
39
 
40
40
  from airflow.exceptions import (
@@ -287,7 +287,6 @@ class PodGenerator:
287
287
  scheduler_job_id: str,
288
288
  run_id: str | None = None,
289
289
  map_index: int = -1,
290
- content_json_for_volume: str = "",
291
290
  *,
292
291
  with_mutation_hook: bool = False,
293
292
  ) -> k8s.V1Pod:
@@ -355,39 +354,6 @@ class PodGenerator:
355
354
  containers=[main_container],
356
355
  )
357
356
 
358
- if content_json_for_volume:
359
- import shlex
360
-
361
- input_file_path = "/tmp/execute/input.json"
362
- execute_volume = V1Volume(
363
- name="execute-volume",
364
- empty_dir=V1EmptyDirVolumeSource(),
365
- )
366
-
367
- execute_volume_mount = V1VolumeMount(
368
- name="execute-volume",
369
- mount_path="/tmp/execute",
370
- read_only=False,
371
- )
372
-
373
- escaped_json = shlex.quote(content_json_for_volume)
374
- init_container = k8s.V1Container(
375
- name="init-container",
376
- image="busybox",
377
- command=["/bin/sh", "-c", f"echo {escaped_json} > {input_file_path}"],
378
- volume_mounts=[execute_volume_mount],
379
- )
380
-
381
- main_container.volume_mounts = [execute_volume_mount]
382
- main_container.command = args[:-1]
383
- main_container.args = args[-1:]
384
-
385
- podspec = k8s.V1PodSpec(
386
- containers=[main_container],
387
- volumes=[execute_volume],
388
- init_containers=[init_container],
389
- )
390
-
391
357
  dynamic_pod.spec = podspec
392
358
 
393
359
  # Reconcile the pods starting with the first chronologically,
@@ -546,7 +512,7 @@ def merge_objects(base_obj, client_obj):
546
512
 
547
513
  for base_key in base_obj.to_dict():
548
514
  base_val = getattr(base_obj, base_key, None)
549
- if not getattr(client_obj, base_key, None) and base_val:
515
+ if not getattr(client_obj, base_key, None) and base_val is not None:
550
516
  if not isinstance(client_obj_cp, dict):
551
517
  setattr(client_obj_cp, base_key, base_val)
552
518
  else: