apache-airflow-providers-cncf-kubernetes 10.7.0rc1__tar.gz → 10.8.0rc1__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 (156) hide show
  1. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/PKG-INFO +7 -8
  2. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/README.rst +4 -5
  3. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/changelog.rst +45 -0
  4. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/index.rst +3 -5
  5. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/kubernetes_executor.rst +13 -13
  6. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/operators.rst +1 -1
  7. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/provider.yaml +2 -1
  8. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/pyproject.toml +4 -4
  9. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/__init__.py +1 -1
  10. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/cli/kubernetes_command.py +8 -4
  11. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/decorators/kubernetes_cmd.py +1 -1
  12. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py +80 -30
  13. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_types.py +50 -10
  14. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py +200 -30
  15. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/operators/kueue.py +17 -2
  16. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/operators/pod.py +52 -0
  17. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/utils/pod_manager.py +69 -17
  18. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/version_compat.py +3 -0
  19. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py +2 -2
  20. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/decorators/test_kubernetes_cmd.py +9 -9
  21. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py +7 -9
  22. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py +72 -18
  23. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py +5 -7
  24. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/log_handlers/test_log_handlers.py +13 -11
  25. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/operators/test_job.py +19 -17
  26. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/operators/test_kueue.py +23 -0
  27. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/operators/test_pod.py +61 -15
  28. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py +5 -2
  29. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/test_template_rendering.py +27 -35
  30. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/.latest-doc-only-change.txt +0 -0
  31. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/cli-ref.rst +0 -0
  32. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/commits.rst +0 -0
  33. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/conf.py +0 -0
  34. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/configurations-ref.rst +0 -0
  35. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/connections/kubernetes.rst +0 -0
  36. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/img/arch-diag-kubernetes.png +0 -0
  37. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/img/arch-diag-kubernetes2.png +0 -0
  38. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/img/k8s-failed-pod.png +0 -0
  39. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/img/k8s-happy-path.png +0 -0
  40. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/installing-providers-from-sources.rst +0 -0
  41. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/integration-logos/Kubernetes.png +0 -0
  42. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/integration-logos/Spark-On-Kubernetes.png +0 -0
  43. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/local_kubernetes_executor.rst +0 -0
  44. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/redirects.txt +0 -0
  45. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/docs/security.rst +0 -0
  46. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/__init__.py +0 -0
  47. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/__init__.py +0 -0
  48. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/__init__.py +0 -0
  49. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/LICENSE +0 -0
  50. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/backcompat/__init__.py +0 -0
  51. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/backcompat/backwards_compat_converters.py +0 -0
  52. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/callbacks.py +0 -0
  53. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/cli/__init__.py +0 -0
  54. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/decorators/__init__.py +0 -0
  55. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/decorators/kubernetes.py +0 -0
  56. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/exceptions.py +0 -0
  57. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/executors/__init__.py +0 -0
  58. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py +0 -0
  59. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/get_provider_info.py +0 -0
  60. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/hooks/__init__.py +0 -0
  61. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/hooks/kubernetes.py +0 -0
  62. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/k8s_model.py +0 -0
  63. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/kube_client.py +0 -0
  64. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/kube_config.py +0 -0
  65. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/kubernetes_executor_templates/__init__.py +0 -0
  66. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/kubernetes_executor_templates/basic_template.yaml +0 -0
  67. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/kubernetes_helper_functions.py +0 -0
  68. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/operators/__init__.py +0 -0
  69. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/operators/custom_object_launcher.py +0 -0
  70. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/operators/job.py +0 -0
  71. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/operators/resource.py +0 -0
  72. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/operators/spark_kubernetes.py +0 -0
  73. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/pod_generator.py +0 -0
  74. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/__init__.py +0 -0
  75. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_image_template.yaml +0 -0
  76. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_volume_template.yaml +0 -0
  77. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/git_sync_template.yaml +0 -0
  78. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/python_kubernetes_script.jinja2 +0 -0
  79. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/python_kubernetes_script.py +0 -0
  80. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/resource_convert/__init__.py +0 -0
  81. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/resource_convert/configmap.py +0 -0
  82. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/resource_convert/env_variable.py +0 -0
  83. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/resource_convert/secret.py +0 -0
  84. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/secret.py +0 -0
  85. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/sensors/__init__.py +0 -0
  86. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/sensors/spark_kubernetes.py +0 -0
  87. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/template_rendering.py +0 -0
  88. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/triggers/__init__.py +0 -0
  89. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/triggers/job.py +0 -0
  90. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/triggers/pod.py +0 -0
  91. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/utils/__init__.py +0 -0
  92. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/utils/delete_from.py +0 -0
  93. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/utils/k8s_resource_iterator.py +0 -0
  94. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/src/airflow/providers/cncf/kubernetes/utils/xcom_sidecar.py +0 -0
  95. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/conftest.py +0 -0
  96. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/system/__init__.py +0 -0
  97. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/system/cncf/__init__.py +0 -0
  98. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/system/cncf/kubernetes/__init__.py +0 -0
  99. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/system/cncf/kubernetes/example_kubernetes.py +0 -0
  100. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/system/cncf/kubernetes/example_kubernetes_async.py +0 -0
  101. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/system/cncf/kubernetes/example_kubernetes_cmd_decorator.py +0 -0
  102. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/system/cncf/kubernetes/example_kubernetes_decorator.py +0 -0
  103. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/system/cncf/kubernetes/example_kubernetes_job.py +0 -0
  104. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/system/cncf/kubernetes/example_kubernetes_kueue.py +0 -0
  105. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/system/cncf/kubernetes/example_kubernetes_resource.py +0 -0
  106. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/system/cncf/kubernetes/example_spark_kubernetes.py +0 -0
  107. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/system/cncf/kubernetes/example_spark_kubernetes_spark_pi.yaml +0 -0
  108. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/system/cncf/kubernetes/spark_job_template.yaml +0 -0
  109. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/__init__.py +0 -0
  110. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/__init__.py +0 -0
  111. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/__init__.py +0 -0
  112. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/backcompat/__init__.py +0 -0
  113. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/backcompat/test_backwards_compat_converters.py +0 -0
  114. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/cli/__init__.py +0 -0
  115. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/cli/test_kubernetes_command.py +0 -0
  116. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/conftest.py +0 -0
  117. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/__init__.py +0 -0
  118. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/executor/__init__.py +0 -0
  119. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/executor/basic_template.yaml +0 -0
  120. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/kube_config +0 -0
  121. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/pods/__init__.py +0 -0
  122. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/pods/generator_base.yaml +0 -0
  123. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/pods/generator_base_with_secrets.yaml +0 -0
  124. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/pods/template.yaml +0 -0
  125. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/spark/__init__.py +0 -0
  126. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/spark/application_template.yaml +0 -0
  127. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/spark/application_test.json +0 -0
  128. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/spark/application_test.yaml +0 -0
  129. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/spark/application_test_with_no_name_from_config.json +0 -0
  130. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/data_files/spark/application_test_with_no_name_from_config.yaml +0 -0
  131. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/decorators/__init__.py +0 -0
  132. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/executors/__init__.py +0 -0
  133. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/executors/test_local_kubernetes_executor.py +0 -0
  134. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/hooks/__init__.py +0 -0
  135. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/log_handlers/__init__.py +0 -0
  136. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/models/__init__.py +0 -0
  137. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/models/test_secret.py +0 -0
  138. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/operators/__init__.py +0 -0
  139. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/operators/test_custom_object_launcher.py +0 -0
  140. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/operators/test_resource.py +0 -0
  141. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/resource_convert/__init__.py +0 -0
  142. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/resource_convert/test_configmap.py +0 -0
  143. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/resource_convert/test_env_variable.py +0 -0
  144. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/resource_convert/test_secret.py +0 -0
  145. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/sensors/__init__.py +0 -0
  146. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/sensors/test_spark_kubernetes.py +0 -0
  147. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/test_callbacks.py +0 -0
  148. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/test_client.py +0 -0
  149. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/test_kubernetes_helper_functions.py +0 -0
  150. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/test_pod_generator.py +0 -0
  151. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/triggers/__init__.py +0 -0
  152. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/triggers/test_job.py +0 -0
  153. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/triggers/test_pod.py +0 -0
  154. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/utils/__init__.py +0 -0
  155. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/utils/test_k8s_resource_iterator.py +0 -0
  156. {apache_airflow_providers_cncf_kubernetes-10.7.0rc1 → apache_airflow_providers_cncf_kubernetes-10.8.0rc1}/tests/unit/cncf/kubernetes/utils/test_pod_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-providers-cncf-kubernetes
3
- Version: 10.7.0rc1
3
+ Version: 10.8.0rc1
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>
@@ -27,8 +27,8 @@ Requires-Dist: cryptography>=41.0.0
27
27
  Requires-Dist: kubernetes>=32.0.0,<33.0.0
28
28
  Requires-Dist: kubernetes_asyncio>=32.0.0,<33.0.0
29
29
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
30
- Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.7.0/changelog.html
31
- Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.7.0
30
+ Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.8.0/changelog.html
31
+ Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.8.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,9 +59,8 @@ Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
59
59
 
60
60
  Package ``apache-airflow-providers-cncf-kubernetes``
61
61
 
62
- Release: ``10.7.0``
62
+ Release: ``10.8.0``
63
63
 
64
- Release Date: ``|PypiReleaseDate|``
65
64
 
66
65
  `Kubernetes <https://kubernetes.io/>`__
67
66
 
@@ -73,12 +72,12 @@ This is a provider package for ``cncf.kubernetes`` provider. All classes for thi
73
72
  are in ``airflow.providers.cncf.kubernetes`` python package.
74
73
 
75
74
  You can find package information and changelog for the provider
76
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.7.0/>`_.
75
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.8.0/>`_.
77
76
 
78
77
  Installation
79
78
  ------------
80
79
 
81
- You can install this package on top of an existing Airflow 2 installation (see ``Requirements`` below
80
+ You can install this package on top of an existing Airflow installation (see ``Requirements`` below
82
81
  for the minimum Airflow version supported) via
83
82
  ``pip install apache-airflow-providers-cncf-kubernetes``
84
83
 
@@ -99,5 +98,5 @@ PIP package Version required
99
98
  ====================== ====================
100
99
 
101
100
  The changelog for the provider package can be found in the
102
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.7.0/changelog.html>`_.
101
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.8.0/changelog.html>`_.
103
102
 
@@ -23,9 +23,8 @@
23
23
 
24
24
  Package ``apache-airflow-providers-cncf-kubernetes``
25
25
 
26
- Release: ``10.7.0``
26
+ Release: ``10.8.0``
27
27
 
28
- Release Date: ``|PypiReleaseDate|``
29
28
 
30
29
  `Kubernetes <https://kubernetes.io/>`__
31
30
 
@@ -37,12 +36,12 @@ This is a provider package for ``cncf.kubernetes`` provider. All classes for thi
37
36
  are in ``airflow.providers.cncf.kubernetes`` python package.
38
37
 
39
38
  You can find package information and changelog for the provider
40
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.7.0/>`_.
39
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.8.0/>`_.
41
40
 
42
41
  Installation
43
42
  ------------
44
43
 
45
- You can install this package on top of an existing Airflow 2 installation (see ``Requirements`` below
44
+ You can install this package on top of an existing Airflow installation (see ``Requirements`` below
46
45
  for the minimum Airflow version supported) via
47
46
  ``pip install apache-airflow-providers-cncf-kubernetes``
48
47
 
@@ -63,4 +62,4 @@ PIP package Version required
63
62
  ====================== ====================
64
63
 
65
64
  The changelog for the provider package can be found in the
66
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.7.0/changelog.html>`_.
65
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.8.0/changelog.html>`_.
@@ -28,6 +28,51 @@ Changelog
28
28
  ---------
29
29
 
30
30
 
31
+ 10.8.0
32
+ ......
33
+
34
+
35
+ Release Date: ``|PypiReleaseDate|``
36
+
37
+ Features
38
+ ~~~~~~~~
39
+
40
+ * ``Add customizable log prefix and formatter to KubernetesPodOperator (#53598)``
41
+ * ``Enhanced Pod Failure Logging in KubernetesExecutor (#54115)``
42
+
43
+ Bug Fixes
44
+ ~~~~~~~~~
45
+
46
+ * ``fix: Handle Kubernetes API responses with non-JSON bodies (#55107)``
47
+ * ``Fix KubernetesExecutor retry on 409 conflict (#54777)``
48
+ * ``KubernetesPodOperator logs pod and container state after error occurred (#54828)``
49
+ * ``Throttle HTTPError during consume pod logs (#54761)``
50
+
51
+ Misc
52
+ ~~~~
53
+
54
+ * ``Remove airflow.models.DAG (#54383)``
55
+ * ``Refactor Kubernetes Executor Types to NamedTuples (#54858)``
56
+ * ``Move some items in 'airflow.utils.context' to appropriate places (#53600)``
57
+
58
+ Doc-only
59
+ ~~~~~~~~
60
+
61
+ * ``Make term Dag consistent in providers docs (#55101)``
62
+
63
+ .. Below changes are excluded from the changelog. Move them to
64
+ appropriate section above if needed. Do not delete the lines(!):
65
+ * ``Remove Legacy Query Object Usage from airflow-models (#52325)``
66
+ * ``Fix k8s pod yaml test to expect redacted sensitive data (#54883)``
67
+ * ``Move secrets_masker over to airflow_shared distribution (#54449)``
68
+ * ``Replace API server's direct Connection access workaround in BaseHook (#54083)``
69
+ * ``Switch pre-commit to prek (#54258)``
70
+ * ``make bundle_name not nullable (#47592)``
71
+ * ``Bump pytest-asyncio to 1.1.0 (#54123)``
72
+
73
+ .. Review and move the new changes to one of the sections above:
74
+ * ``Fix Airflow 2 reference in README/index of providers (#55240)``
75
+
31
76
  10.7.0
32
77
  ......
33
78
 
@@ -66,7 +66,7 @@
66
66
  :maxdepth: 1
67
67
  :caption: Resources
68
68
 
69
- Example DAGs <https://github.com/apache/airflow/tree/providers-cncf-kubernetes/|version|/providers/cncf/kubernetes/tests/system/cncf/kubernetes>
69
+ Example Dags <https://github.com/apache/airflow/tree/providers-cncf-kubernetes/|version|/providers/cncf/kubernetes/tests/system/cncf/kubernetes>
70
70
  PyPI Repository <https://pypi.org/project/apache-airflow-providers-cncf-kubernetes/>
71
71
  Installing from sources <installing-providers-from-sources>
72
72
 
@@ -87,9 +87,7 @@ apache-airflow-providers-cncf-kubernetes package
87
87
  `Kubernetes <https://kubernetes.io/>`__
88
88
 
89
89
 
90
- Release: 10.7.0
91
-
92
- Release Date: ``|PypiReleaseDate|``
90
+ Release: 10.8.0
93
91
 
94
92
  Provider package
95
93
  ----------------
@@ -100,7 +98,7 @@ All classes for this package are included in the ``airflow.providers.cncf.kubern
100
98
  Installation
101
99
  ------------
102
100
 
103
- You can install this package on top of an existing Airflow 2 installation via
101
+ You can install this package on top of an existing Airflow installation via
104
102
  ``pip install apache-airflow-providers-cncf-kubernetes``.
105
103
  For the minimum Airflow version supported, see ``Requirements`` below.
106
104
 
@@ -36,7 +36,7 @@ not necessarily need to be running on Kubernetes, but does need access to a Kube
36
36
 
37
37
  KubernetesExecutor requires a non-sqlite database in the backend.
38
38
 
39
- When a DAG submits a task, the KubernetesExecutor requests a worker pod from the Kubernetes API. The worker pod then runs the task, reports the result, and terminates.
39
+ When a Dag submits a task, the KubernetesExecutor requests a worker pod from the Kubernetes API. The worker pod then runs the task, reports the result, and terminates.
40
40
 
41
41
  .. image:: img/arch-diag-kubernetes.png
42
42
 
@@ -45,7 +45,7 @@ One example of an Airflow deployment running on a distributed set of five nodes
45
45
 
46
46
  .. image:: img/arch-diag-kubernetes2.png
47
47
 
48
- Consistent with the regular Airflow architecture, the Workers need access to the DAG files to execute the tasks within those DAGs and interact with the Metadata repository. Also, configuration information specific to the Kubernetes Executor, such as the worker namespace and image information, needs to be specified in the Airflow Configuration file.
48
+ Consistent with the regular Airflow architecture, the Workers need access to the Dag files to execute the tasks within those Dags and interact with the Metadata repository. Also, configuration information specific to the Kubernetes Executor, such as the worker namespace and image information, needs to be specified in the Airflow Configuration file.
49
49
 
50
50
  Additionally, the Kubernetes Executor enables specification of additional features on a per-task basis using the Executor config.
51
51
 
@@ -103,24 +103,24 @@ With these requirements in mind, here are some examples of basic ``pod_template_
103
103
 
104
104
  The examples below should work when using default Airflow configuration values. However, many custom
105
105
  configuration values need to be explicitly passed to the pod via this template too. This includes,
106
- but is not limited to, sql configuration, required Airflow connections, DAGs folder path and
106
+ but is not limited to, sql configuration, required Airflow connections, Dags folder path and
107
107
  logging settings. See :doc:`../../configurations-ref` for details.
108
108
 
109
- Storing DAGs in the image:
109
+ Storing Dags in the image:
110
110
 
111
111
  .. literalinclude:: /../src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_image_template.yaml
112
112
  :language: yaml
113
113
  :start-after: [START template_with_dags_in_image]
114
114
  :end-before: [END template_with_dags_in_image]
115
115
 
116
- Storing DAGs in a ``persistentVolume``:
116
+ Storing Dags in a ``persistentVolume``:
117
117
 
118
118
  .. literalinclude:: /../src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_volume_template.yaml
119
119
  :language: yaml
120
120
  :start-after: [START template_with_dags_in_volume]
121
121
  :end-before: [END template_with_dags_in_volume]
122
122
 
123
- Pulling DAGs from ``git``:
123
+ Pulling Dags from ``git``:
124
124
 
125
125
  .. literalinclude:: /../src/airflow/providers/cncf/kubernetes/pod_template_file_examples/git_sync_template.yaml
126
126
  :language: yaml
@@ -165,14 +165,14 @@ Here is an example of a task with both features:
165
165
 
166
166
  import pendulum
167
167
 
168
- from airflow import DAG
168
+ from airflow import Dag
169
169
  from airflow.decorators import task
170
170
  from airflow.example_dags.libs.helper import print_stuff
171
171
  from airflow.settings import AIRFLOW_HOME
172
172
 
173
173
  from kubernetes.client import models as k8s
174
174
 
175
- with DAG(
175
+ with Dag(
176
176
  dag_id="example_pod_template_file",
177
177
  schedule=None,
178
178
  start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
@@ -189,18 +189,18 @@ Here is an example of a task with both features:
189
189
  print_stuff()
190
190
 
191
191
 
192
- Managing DAGs and logs
192
+ Managing Dags and logs
193
193
  ~~~~~~~~~~~~~~~~~~~~~~
194
194
 
195
195
  Use of persistent volumes is optional and depends on your configuration.
196
196
 
197
197
  - **Dags**:
198
198
 
199
- To get the DAGs into the workers, you can:
199
+ To get the Dags into the workers, you can:
200
200
 
201
- - Include DAGs in the image.
202
- - Use ``git-sync`` which, before starting the worker container, will run a ``git pull`` of the DAGs repository.
203
- - Storing DAGs on a persistent volume, which can be mounted on all workers.
201
+ - Include Dags in the image.
202
+ - Use ``git-sync`` which, before starting the worker container, will run a ``git pull`` of the Dags repository.
203
+ - Storing Dags on a persistent volume, which can be mounted on all workers.
204
204
 
205
205
  - **Logs**:
206
206
 
@@ -111,7 +111,7 @@ Difference between ``KubernetesPodOperator`` and Kubernetes object spec
111
111
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
112
112
  The :class:`~airflow.providers.cncf.kubernetes.operators.pod.KubernetesPodOperator` can be considered
113
113
  a substitute for a Kubernetes object spec definition that is able
114
- to be run in the Airflow scheduler in the DAG context. If using the operator, there is no need to create the
114
+ to be run in the Airflow scheduler in the Dag context. If using the operator, there is no need to create the
115
115
  equivalent YAML/JSON object spec for the Pod you would like to run.
116
116
  The YAML file can still be provided with the ``pod_template_file`` or even the Pod Spec constructed in Python via
117
117
  the ``full_pod_spec`` parameter which requires a Kubernetes ``V1Pod``.
@@ -22,12 +22,13 @@ description: |
22
22
  `Kubernetes <https://kubernetes.io/>`__
23
23
 
24
24
  state: ready
25
- source-date-epoch: 1754503046
25
+ source-date-epoch: 1756876671
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.8.0
31
32
  - 10.7.0
32
33
  - 10.6.2
33
34
  - 10.6.1
@@ -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.7.0rc1"
28
+ version = "10.8.0rc1"
29
29
  description = "Provider package apache-airflow-providers-cncf-kubernetes for Apache Airflow"
30
30
  readme = "README.rst"
31
31
  authors = [
@@ -54,7 +54,7 @@ requires-python = ">=3.10"
54
54
 
55
55
  # The dependencies should be modified in place in the generated file.
56
56
  # Any change in the dependencies is preserved when the file is regenerated
57
- # Make sure to run ``breeze static-checks --type update-providers-dependencies --all-files``
57
+ # Make sure to run ``prek update-providers-dependencies --all-files``
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",
@@ -108,8 +108,8 @@ apache-airflow-providers-common-sql = {workspace = true}
108
108
  apache-airflow-providers-standard = {workspace = true}
109
109
 
110
110
  [project.urls]
111
- "Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.7.0"
112
- "Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.7.0/changelog.html"
111
+ "Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.8.0"
112
+ "Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.8.0/changelog.html"
113
113
  "Bug Tracker" = "https://github.com/apache/airflow/issues"
114
114
  "Source Code" = "https://github.com/apache/airflow"
115
115
  "Slack Chat" = "https://s.apache.org/airflow-slack"
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
29
29
 
30
30
  __all__ = ["__version__"]
31
31
 
32
- __version__ = "10.7.0"
32
+ __version__ = "10.8.0"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
35
  "2.10.0"
@@ -32,12 +32,16 @@ from airflow.providers.cncf.kubernetes.executors.kubernetes_executor import Kube
32
32
  from airflow.providers.cncf.kubernetes.kube_client import get_kube_client
33
33
  from airflow.providers.cncf.kubernetes.kubernetes_helper_functions import create_unique_id
34
34
  from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator, generate_pod_command_args
35
- from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
35
+ from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS, AIRFLOW_V_3_1_PLUS
36
36
  from airflow.utils import cli as cli_utils, yaml
37
- from airflow.utils.cli import get_dag
38
37
  from airflow.utils.providers_configuration_loader import providers_configuration_loaded
39
38
  from airflow.utils.types import DagRunType
40
39
 
40
+ if AIRFLOW_V_3_1_PLUS:
41
+ from airflow.utils.cli import get_bagged_dag
42
+ else:
43
+ from airflow.utils.cli import get_dag as get_bagged_dag # type: ignore[attr-defined,no-redef]
44
+
41
45
 
42
46
  @cli_utils.action_cli
43
47
  @providers_configuration_loaded
@@ -45,9 +49,9 @@ def generate_pod_yaml(args):
45
49
  """Generate yaml files for each task in the DAG. Used for testing output of KubernetesExecutor."""
46
50
  logical_date = args.logical_date if AIRFLOW_V_3_0_PLUS else args.execution_date
47
51
  if AIRFLOW_V_3_0_PLUS:
48
- dag = get_dag(bundle_names=args.bundle_name, dag_id=args.dag_id)
52
+ dag = get_bagged_dag(bundle_names=args.bundle_name, dag_id=args.dag_id)
49
53
  else:
50
- dag = get_dag(subdir=args.subdir, dag_id=args.dag_id)
54
+ dag = get_bagged_dag(subdir=args.subdir, dag_id=args.dag_id)
51
55
  yaml_output_path = args.output_path
52
56
 
53
57
  dm = DagModel(dag_id=dag.dag_id)
@@ -24,9 +24,9 @@ from airflow.providers.cncf.kubernetes.operators.pod import KubernetesPodOperato
24
24
  from airflow.providers.cncf.kubernetes.version_compat import (
25
25
  DecoratedOperator,
26
26
  TaskDecorator,
27
+ context_merge,
27
28
  task_decorator_factory,
28
29
  )
29
- from airflow.utils.context import context_merge
30
30
  from airflow.utils.operator_helpers import determine_kwargs
31
31
 
32
32
  if TYPE_CHECKING:
@@ -66,6 +66,8 @@ from airflow.providers.cncf.kubernetes.exceptions import PodMutationHookExceptio
66
66
  from airflow.providers.cncf.kubernetes.executors.kubernetes_executor_types import (
67
67
  ADOPTED,
68
68
  POD_EXECUTOR_DONE_KEY,
69
+ KubernetesJob,
70
+ KubernetesResults,
69
71
  )
70
72
  from airflow.providers.cncf.kubernetes.kube_config import KubeConfig
71
73
  from airflow.providers.cncf.kubernetes.kubernetes_helper_functions import annotations_to_key
@@ -85,10 +87,6 @@ if TYPE_CHECKING:
85
87
  from airflow.executors import workloads
86
88
  from airflow.models.taskinstance import TaskInstance
87
89
  from airflow.models.taskinstancekey import TaskInstanceKey
88
- from airflow.providers.cncf.kubernetes.executors.kubernetes_executor_types import (
89
- KubernetesJobType,
90
- KubernetesResultsType,
91
- )
92
90
  from airflow.providers.cncf.kubernetes.executors.kubernetes_executor_utils import (
93
91
  AirflowKubernetesScheduler,
94
92
  )
@@ -156,8 +154,8 @@ class KubernetesExecutor(BaseExecutor):
156
154
  def __init__(self):
157
155
  self.kube_config = KubeConfig()
158
156
  self._manager = multiprocessing.Manager()
159
- self.task_queue: Queue[KubernetesJobType] = self._manager.Queue()
160
- self.result_queue: Queue[KubernetesResultsType] = self._manager.Queue()
157
+ self.task_queue: Queue[KubernetesJob] = self._manager.Queue()
158
+ self.result_queue: Queue[KubernetesResults] = self._manager.Queue()
161
159
  self.kube_scheduler: AirflowKubernetesScheduler | None = None
162
160
  self.kube_client: client.CoreV1Api | None = None
163
161
  self.scheduler_job_id: str | None = None
@@ -279,7 +277,7 @@ class KubernetesExecutor(BaseExecutor):
279
277
  else:
280
278
  pod_template_file = None
281
279
  self.event_buffer[key] = (TaskInstanceState.QUEUED, self.scheduler_job_id)
282
- self.task_queue.put((key, command, kube_executor_config, pod_template_file))
280
+ self.task_queue.put(KubernetesJob(key, command, kube_executor_config, pod_template_file))
283
281
  # We keep a temporary local record that we've handled this so we don't
284
282
  # try and remove it from the QUEUED state while we process it
285
283
  self.last_handled[key] = time.time()
@@ -330,17 +328,16 @@ class KubernetesExecutor(BaseExecutor):
330
328
  while True:
331
329
  results = self.result_queue.get_nowait()
332
330
  try:
333
- key, state, pod_name, namespace, resource_version = results
334
- last_resource_version[namespace] = resource_version
335
- self.log.info("Changing state of %s to %s", results, state)
331
+ last_resource_version[results.namespace] = results.resource_version
332
+ self.log.info("Changing state of %s to %s", results, results.state)
336
333
  try:
337
- self._change_state(key, state, pod_name, namespace)
334
+ self._change_state(results)
338
335
  except Exception as e:
339
336
  self.log.exception(
340
337
  "Exception: %s when attempting to change state of %s to %s, re-queueing.",
341
338
  e,
342
339
  results,
343
- state,
340
+ results.state,
344
341
  )
345
342
  self.result_queue.put(results)
346
343
  finally:
@@ -361,7 +358,7 @@ class KubernetesExecutor(BaseExecutor):
361
358
  task = self.task_queue.get_nowait()
362
359
 
363
360
  try:
364
- key, command, kube_executor_config, pod_template_file = task
361
+ key = task.key
365
362
  self.kube_scheduler.run_next(task)
366
363
  self.task_publish_retries.pop(key, None)
367
364
  except PodReconciliationError as e:
@@ -371,31 +368,41 @@ class KubernetesExecutor(BaseExecutor):
371
368
  )
372
369
  self.fail(task[0], e)
373
370
  except ApiException as e:
374
- body = json.loads(e.body)
371
+ try:
372
+ if e.body:
373
+ body = json.loads(e.body)
374
+ else:
375
+ # If no body content, use reason as the message
376
+ body = {"message": e.reason}
377
+ except (json.JSONDecodeError, ValueError, TypeError):
378
+ # If the body is a string (e.g., in a 429 error), it can't be parsed as JSON.
379
+ # Use the body directly as the message instead.
380
+ body = {"message": e.body}
381
+
375
382
  retries = self.task_publish_retries[key]
376
- # In case of exceeded quota errors, requeue the task as per the task_publish_max_retries
383
+ # In case of exceeded quota or conflict errors, requeue the task as per the task_publish_max_retries
384
+ message = body.get("message", "")
377
385
  if (
378
- str(e.status) == "403"
379
- and "exceeded quota" in body["message"]
380
- and (self.task_publish_max_retries == -1 or retries < self.task_publish_max_retries)
381
- ):
386
+ (str(e.status) == "403" and "exceeded quota" in message)
387
+ or (str(e.status) == "409" and "object has been modified" in message)
388
+ ) and (self.task_publish_max_retries == -1 or retries < self.task_publish_max_retries):
382
389
  self.log.warning(
383
390
  "[Try %s of %s] Kube ApiException for Task: (%s). Reason: %r. Message: %s",
384
391
  self.task_publish_retries[key] + 1,
385
392
  self.task_publish_max_retries,
386
393
  key,
387
394
  e.reason,
388
- body["message"],
395
+ message,
389
396
  )
390
397
  self.task_queue.put(task)
391
398
  self.task_publish_retries[key] = retries + 1
392
399
  else:
393
400
  self.log.error("Pod creation failed with reason %r. Failing task", e.reason)
394
- key, _, _, _ = task
401
+ key = task.key
395
402
  self.fail(key, e)
396
403
  self.task_publish_retries.pop(key, None)
397
404
  except PodMutationHookException as e:
398
- key, _, _, _ = task
405
+ key = task.key
399
406
  self.log.error(
400
407
  "Pod Mutation Hook failed for the task %s. Failing task. Details: %s",
401
408
  key,
@@ -408,15 +415,56 @@ class KubernetesExecutor(BaseExecutor):
408
415
  @provide_session
409
416
  def _change_state(
410
417
  self,
411
- key: TaskInstanceKey,
412
- state: TaskInstanceState | str | None,
413
- pod_name: str,
414
- namespace: str,
418
+ results: KubernetesResults,
415
419
  session: Session = NEW_SESSION,
416
420
  ) -> None:
421
+ """Change state of the task based on KubernetesResults."""
417
422
  if TYPE_CHECKING:
418
423
  assert self.kube_scheduler
419
424
 
425
+ key = results.key
426
+ state = results.state
427
+ pod_name = results.pod_name
428
+ namespace = results.namespace
429
+ failure_details = results.failure_details
430
+
431
+ if state == TaskInstanceState.FAILED:
432
+ # Use pre-collected failure details from the watcher to avoid additional API calls
433
+ if failure_details:
434
+ pod_status = failure_details.get("pod_status")
435
+ pod_reason = failure_details.get("pod_reason")
436
+ pod_message = failure_details.get("pod_message")
437
+ container_state = failure_details.get("container_state")
438
+ container_reason = failure_details.get("container_reason")
439
+ container_message = failure_details.get("container_message")
440
+ exit_code = failure_details.get("exit_code")
441
+ container_type = failure_details.get("container_type")
442
+ container_name = failure_details.get("container_name")
443
+
444
+ task_key_str = f"{key.dag_id}.{key.task_id}.{key.try_number}"
445
+ self.log.warning(
446
+ "Task %s failed in pod %s/%s. Pod phase: %s, reason: %s, message: %s, "
447
+ "container_type: %s, container_name: %s, container_state: %s, container_reason: %s, "
448
+ "container_message: %s, exit_code: %s",
449
+ task_key_str,
450
+ namespace,
451
+ pod_name,
452
+ pod_status,
453
+ pod_reason,
454
+ pod_message,
455
+ container_type,
456
+ container_name,
457
+ container_state,
458
+ container_reason,
459
+ container_message,
460
+ exit_code,
461
+ )
462
+ else:
463
+ task_key_str = f"{key.dag_id}.{key.task_id}.{key.try_number}"
464
+ self.log.warning(
465
+ "Task %s failed in pod %s/%s (no details available)", task_key_str, namespace, pod_name
466
+ )
467
+
420
468
  if state == ADOPTED:
421
469
  # When the task pod is adopted by another executor,
422
470
  # then remove the task from the current executor running queue.
@@ -696,18 +744,20 @@ class KubernetesExecutor(BaseExecutor):
696
744
  results = self.result_queue.get_nowait()
697
745
  self.log.warning("Executor shutting down, flushing results=%s", results)
698
746
  try:
699
- key, state, pod_name, namespace, resource_version = results
700
747
  self.log.info(
701
- "Changing state of %s to %s : resource_version=%d", results, state, resource_version
748
+ "Changing state of %s to %s : resource_version=%s",
749
+ results,
750
+ results.state,
751
+ results.resource_version,
702
752
  )
703
753
  try:
704
- self._change_state(key, state, pod_name, namespace)
754
+ self._change_state(results)
705
755
  except Exception as e:
706
756
  self.log.exception(
707
757
  "Ignoring exception: %s when attempting to change state of %s to %s.",
708
758
  e,
709
759
  results,
710
- state,
760
+ results.state,
711
761
  )
712
762
  finally:
713
763
  self.result_queue.task_done()
@@ -16,26 +16,66 @@
16
16
  # under the License.
17
17
  from __future__ import annotations
18
18
 
19
- from typing import TYPE_CHECKING, Any
19
+ from typing import TYPE_CHECKING, Any, Literal, NamedTuple, TypedDict
20
20
 
21
- ADOPTED = "adopted"
22
21
  if TYPE_CHECKING:
23
22
  from collections.abc import Sequence
24
23
 
25
24
  from airflow.models.taskinstance import TaskInstanceKey
26
25
  from airflow.utils.state import TaskInstanceState
27
26
 
28
- # TODO: Remove after Airflow 2 support is removed
29
- CommandType = Sequence[str]
30
27
 
31
- # TaskInstance key, command, configuration, pod_template_file
32
- KubernetesJobType = tuple[TaskInstanceKey, CommandType, Any, str | None]
28
+ ADOPTED = "adopted"
29
+
30
+
31
+ class FailureDetails(TypedDict, total=False):
32
+ """Detailed information about pod/container failure."""
33
+
34
+ pod_status: str | None
35
+ pod_reason: str | None
36
+ pod_message: str | None
37
+ container_state: str | None
38
+ container_reason: str | None
39
+ container_message: str | None
40
+ exit_code: int | None
41
+ container_type: Literal["init", "main"] | None
42
+ container_name: str | None
43
+
44
+
45
+ class KubernetesResults(NamedTuple):
46
+ """Results from Kubernetes task execution."""
47
+
48
+ key: TaskInstanceKey
49
+ state: TaskInstanceState | str | None
50
+ pod_name: str
51
+ namespace: str
52
+ resource_version: str
53
+ failure_details: FailureDetails | None
54
+
55
+
56
+ class KubernetesWatch(NamedTuple):
57
+ """Watch event data from Kubernetes pods."""
58
+
59
+ pod_name: str
60
+ namespace: str
61
+ state: TaskInstanceState | str | None
62
+ annotations: dict[str, str]
63
+ resource_version: str
64
+ failure_details: FailureDetails | None
65
+
66
+
67
+ # TODO: Remove after Airflow 2 support is removed
68
+ CommandType = "Sequence[str]"
69
+
70
+
71
+ class KubernetesJob(NamedTuple):
72
+ """Job definition for Kubernetes execution."""
33
73
 
34
- # key, pod state, pod_name, namespace, resource_version
35
- KubernetesResultsType = tuple[TaskInstanceKey, TaskInstanceState | str | None, str, str, str]
74
+ key: TaskInstanceKey
75
+ command: Sequence[str]
76
+ kube_executor_config: Any
77
+ pod_template_file: str | None
36
78
 
37
- # pod_name, namespace, pod state, annotations, resource_version
38
- KubernetesWatchType = tuple[str, str, TaskInstanceState | str | None, dict[str, str], str]
39
79
 
40
80
  ALL_NAMESPACES = "ALL_NAMESPACES"
41
81
  POD_EXECUTOR_DONE_KEY = "airflow_executor_done"