apache-airflow-providers-cncf-kubernetes 10.5.0rc1__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 (156) hide show
  1. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/PKG-INFO +1 -1
  2. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/changelog.rst +8 -0
  3. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/pyproject.toml +1 -1
  4. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_utils.py +2 -3
  5. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/pod.py +1 -1
  6. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/pod_generator.py +2 -36
  7. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/template_rendering.py +17 -0
  8. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/test_pod.py +3 -0
  9. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/test_pod_generator.py +7 -31
  10. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/test_template_rendering.py +36 -2
  11. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/README.rst +0 -0
  12. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/.latest-doc-only-change.txt +0 -0
  13. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/cli-ref.rst +0 -0
  14. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/commits.rst +0 -0
  15. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/conf.py +0 -0
  16. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/configurations-ref.rst +0 -0
  17. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/connections/kubernetes.rst +0 -0
  18. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/img/arch-diag-kubernetes.png +0 -0
  19. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/img/arch-diag-kubernetes2.png +0 -0
  20. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/img/k8s-failed-pod.png +0 -0
  21. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/img/k8s-happy-path.png +0 -0
  22. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/index.rst +0 -0
  23. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/installing-providers-from-sources.rst +0 -0
  24. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/integration-logos/Kubernetes.png +0 -0
  25. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/integration-logos/Spark-On-Kubernetes.png +0 -0
  26. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/kubernetes_executor.rst +0 -0
  27. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/local_kubernetes_executor.rst +0 -0
  28. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/operators.rst +0 -0
  29. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/redirects.txt +0 -0
  30. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/security.rst +0 -0
  31. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/provider.yaml +0 -0
  32. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/__init__.py +0 -0
  33. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/__init__.py +0 -0
  34. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/__init__.py +0 -0
  35. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/LICENSE +0 -0
  36. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/__init__.py +0 -0
  37. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/backcompat/__init__.py +0 -0
  38. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/backcompat/backwards_compat_converters.py +0 -0
  39. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/callbacks.py +0 -0
  40. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/cli/__init__.py +0 -0
  41. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/cli/kubernetes_command.py +0 -0
  42. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/decorators/__init__.py +0 -0
  43. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/decorators/kubernetes.py +0 -0
  44. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/decorators/kubernetes_cmd.py +0 -0
  45. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/exceptions.py +0 -0
  46. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/executors/__init__.py +0 -0
  47. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor.py +0 -0
  48. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/executors/kubernetes_executor_types.py +0 -0
  49. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/executors/local_kubernetes_executor.py +0 -0
  50. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/get_provider_info.py +0 -0
  51. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/hooks/__init__.py +0 -0
  52. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/hooks/kubernetes.py +0 -0
  53. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/k8s_model.py +0 -0
  54. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/kube_client.py +0 -0
  55. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/kube_config.py +0 -0
  56. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/kubernetes_executor_templates/__init__.py +0 -0
  57. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/kubernetes_executor_templates/basic_template.yaml +0 -0
  58. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/kubernetes_helper_functions.py +0 -0
  59. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/__init__.py +0 -0
  60. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/custom_object_launcher.py +0 -0
  61. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/job.py +0 -0
  62. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/kueue.py +0 -0
  63. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/resource.py +0 -0
  64. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/operators/spark_kubernetes.py +0 -0
  65. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/__init__.py +0 -0
  66. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_image_template.yaml +0 -0
  67. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_volume_template.yaml +0 -0
  68. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/git_sync_template.yaml +0 -0
  69. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/python_kubernetes_script.jinja2 +0 -0
  70. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/python_kubernetes_script.py +0 -0
  71. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/resource_convert/__init__.py +0 -0
  72. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/resource_convert/configmap.py +0 -0
  73. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/resource_convert/env_variable.py +0 -0
  74. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/resource_convert/secret.py +0 -0
  75. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/secret.py +0 -0
  76. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/sensors/__init__.py +0 -0
  77. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/sensors/spark_kubernetes.py +0 -0
  78. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/triggers/__init__.py +0 -0
  79. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/triggers/job.py +0 -0
  80. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/triggers/pod.py +0 -0
  81. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/utils/__init__.py +0 -0
  82. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/utils/delete_from.py +0 -0
  83. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/utils/k8s_resource_iterator.py +0 -0
  84. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/utils/pod_manager.py +0 -0
  85. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/utils/xcom_sidecar.py +0 -0
  86. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/version_compat.py +0 -0
  87. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/conftest.py +0 -0
  88. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/__init__.py +0 -0
  89. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/__init__.py +0 -0
  90. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/__init__.py +0 -0
  91. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_kubernetes.py +0 -0
  92. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_kubernetes_async.py +0 -0
  93. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_kubernetes_cmd_decorator.py +0 -0
  94. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_kubernetes_decorator.py +0 -0
  95. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_kubernetes_job.py +0 -0
  96. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_kubernetes_kueue.py +0 -0
  97. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_kubernetes_resource.py +0 -0
  98. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_spark_kubernetes.py +0 -0
  99. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/example_spark_kubernetes_spark_pi.yaml +0 -0
  100. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/spark_job_template.yaml +0 -0
  101. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/__init__.py +0 -0
  102. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/__init__.py +0 -0
  103. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/__init__.py +0 -0
  104. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/backcompat/__init__.py +0 -0
  105. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/backcompat/test_backwards_compat_converters.py +0 -0
  106. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/cli/__init__.py +0 -0
  107. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/cli/test_kubernetes_command.py +0 -0
  108. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/conftest.py +0 -0
  109. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/__init__.py +0 -0
  110. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/executor/__init__.py +0 -0
  111. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/executor/basic_template.yaml +0 -0
  112. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/kube_config +0 -0
  113. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/pods/__init__.py +0 -0
  114. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/pods/generator_base.yaml +0 -0
  115. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/pods/generator_base_with_secrets.yaml +0 -0
  116. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/pods/template.yaml +0 -0
  117. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/spark/__init__.py +0 -0
  118. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/spark/application_template.yaml +0 -0
  119. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/spark/application_test.json +0 -0
  120. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/data_files/spark/application_test.yaml +0 -0
  121. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → 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
  122. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → 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
  123. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/decorators/__init__.py +0 -0
  124. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py +0 -0
  125. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/decorators/test_kubernetes_cmd.py +0 -0
  126. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py +0 -0
  127. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/executors/__init__.py +0 -0
  128. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/executors/test_kubernetes_executor.py +0 -0
  129. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/executors/test_local_kubernetes_executor.py +0 -0
  130. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/hooks/__init__.py +0 -0
  131. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/hooks/test_kubernetes.py +0 -0
  132. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/log_handlers/__init__.py +0 -0
  133. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/log_handlers/test_log_handlers.py +0 -0
  134. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/models/__init__.py +0 -0
  135. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/models/test_secret.py +0 -0
  136. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/__init__.py +0 -0
  137. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/test_custom_object_launcher.py +0 -0
  138. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/test_job.py +0 -0
  139. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/test_kueue.py +0 -0
  140. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/test_resource.py +0 -0
  141. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/operators/test_spark_kubernetes.py +0 -0
  142. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/resource_convert/__init__.py +0 -0
  143. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/resource_convert/test_configmap.py +0 -0
  144. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/resource_convert/test_env_variable.py +0 -0
  145. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/resource_convert/test_secret.py +0 -0
  146. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/sensors/__init__.py +0 -0
  147. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/sensors/test_spark_kubernetes.py +0 -0
  148. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/test_callbacks.py +0 -0
  149. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/test_client.py +0 -0
  150. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/test_kubernetes_helper_functions.py +0 -0
  151. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/triggers/__init__.py +0 -0
  152. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/triggers/test_job.py +0 -0
  153. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/triggers/test_pod.py +0 -0
  154. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/utils/__init__.py +0 -0
  155. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/utils/test_k8s_resource_iterator.py +0 -0
  156. {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/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.5.0rc1
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>
@@ -44,6 +44,13 @@ Features
44
44
  * ``Add 'test_connection' method to 'KubernetesHook' (#47881)``
45
45
  * ``Add '@task.kuberenetes_cmd' (#46913)``
46
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
+
47
54
  Misc
48
55
  ~~~~
49
56
 
@@ -56,6 +63,7 @@ Misc
56
63
  * ``Update description of provider.yaml dependencies (#50231)``
57
64
  * ``Avoid committing history for providers (#49907)``
58
65
  * ``capitalize the term airflow (#49450)``
66
+ * ``Prepare release for providers May 2025 (#50531)``
59
67
 
60
68
  10.4.3
61
69
  ......
@@ -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.5.0rc1"
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 = [
@@ -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,
@@ -305,7 +305,7 @@ class KubernetesPodOperator(BaseOperator):
305
305
  node_selector: dict | None = None,
306
306
  image_pull_secrets: list[k8s.V1LocalObjectReference] | None = None,
307
307
  service_account_name: str | None = None,
308
- automount_service_account_token: bool = True,
308
+ automount_service_account_token: bool | None = None,
309
309
  hostnetwork: bool = False,
310
310
  host_aliases: list[k8s.V1HostAlias] | None = None,
311
311
  tolerations: list[k8s.V1Toleration] | None = None,
@@ -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:
@@ -19,11 +19,14 @@ from __future__ import annotations
19
19
 
20
20
  from typing import TYPE_CHECKING
21
21
 
22
+ from jinja2 import TemplateAssertionError, UndefinedError
22
23
  from kubernetes.client.api_client import ApiClient
23
24
 
25
+ from airflow.exceptions import AirflowException
24
26
  from airflow.providers.cncf.kubernetes.kube_config import KubeConfig
25
27
  from airflow.providers.cncf.kubernetes.kubernetes_helper_functions import create_unique_id
26
28
  from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator
29
+ from airflow.utils.session import NEW_SESSION, provide_session
27
30
 
28
31
  if TYPE_CHECKING:
29
32
  from airflow.models.taskinstance import TaskInstance
@@ -58,3 +61,17 @@ def render_k8s_pod_yaml(task_instance: TaskInstance) -> dict | None:
58
61
  )
59
62
  sanitized_pod = ApiClient().sanitize_for_serialization(pod)
60
63
  return sanitized_pod
64
+
65
+
66
+ @provide_session
67
+ def get_rendered_k8s_spec(task_instance: TaskInstance, session=NEW_SESSION) -> dict | None:
68
+ """Fetch rendered template fields from DB."""
69
+ from airflow.models.renderedtifields import RenderedTaskInstanceFields
70
+
71
+ rendered_k8s_spec = RenderedTaskInstanceFields.get_k8s_pod_yaml(task_instance, session=session)
72
+ if not rendered_k8s_spec:
73
+ try:
74
+ rendered_k8s_spec = render_k8s_pod_yaml(task_instance)
75
+ except (TemplateAssertionError, UndefinedError) as e:
76
+ raise AirflowException(f"Unable to render a k8s spec for this taskinstance: {e}") from e
77
+ return rendered_k8s_spec
@@ -973,6 +973,7 @@ class TestKubernetesPodOperator:
973
973
  foo: bar
974
974
  spec:
975
975
  serviceAccountName: foo
976
+ automountServiceAccountToken: false
976
977
  affinity:
977
978
  nodeAffinity:
978
979
  requiredDuringSchedulingIgnoredDuringExecution:
@@ -1036,6 +1037,8 @@ class TestKubernetesPodOperator:
1036
1037
  assert pod.spec.containers[0].image_pull_policy == "Always"
1037
1038
  assert pod.spec.containers[0].command == ["something"]
1038
1039
  assert pod.spec.service_account_name == "foo"
1040
+ assert not pod.spec.automount_service_account_token
1041
+
1039
1042
  affinity = {
1040
1043
  "node_affinity": {
1041
1044
  "preferred_during_scheduling_ignored_during_execution": [
@@ -174,12 +174,7 @@ class TestPodGenerator:
174
174
  '{"token":"mock","ti":{"id":"4d828a62-a417-4936-a7a6-2b3fabacecab","task_id":"mock","dag_id":"mock","run_id":"mock","try_number":1,"map_index":-1,"pool_slots":1,"queue":"default","priority_weight":1},"dag_rel_path":"mock.py","bundle_info":{"name":"n/a","version":"no matter"},"log_path":"mock.log","kind":"ExecuteTask"}',
175
175
  '{"token":"mock","ti":{"id":"4d828a62-a417-4936-a7a6-2b3fabacecab","task_id":"mock","dag_id":"mock","run_id":"mock","try_number":1,"map_index":-1,"pool_slots":1,"queue":"default","priority_weight":1},"dag_rel_path":"mock.py","bundle_info":{"name":"n/a","version":"no matter"},"log_path":"mock.log","kind":"ExecuteTask"}',
176
176
  id="regular-input",
177
- ),
178
- pytest.param(
179
- '{"token":"mock","ti":{"id":"4d828a62-a417-4936-a7a6-2b3fabacecab","task_id":"moc\'k","dag_id":"mock","run_id":"mock","try_number":1,"map_index":-1,"pool_slots":1,"queue":"default","priority_weight":1},"dag_rel_path":"mock.py","bundle_info":{"name":"n/a","version":"no matter"},"log_path":"mock.log","kind":"ExecuteTask"}',
180
- '{"token":"mock","ti":{"id":"4d828a62-a417-4936-a7a6-2b3fabacecab","task_id":"moc\'"\'"\'k","dag_id":"mock","run_id":"mock","try_number":1,"map_index":-1,"pool_slots":1,"queue":"default","priority_weight":1},"dag_rel_path":"mock.py","bundle_info":{"name":"n/a","version":"no matter"},"log_path":"mock.log","kind":"ExecuteTask"}',
181
- id="input-with-single-quote-in-task-id",
182
- ),
177
+ )
183
178
  ],
184
179
  )
185
180
  def test_pod_spec_for_task_sdk_runs(self, content_json, expected, data_file):
@@ -196,44 +191,25 @@ class TestPodGenerator:
196
191
  "python",
197
192
  "-m",
198
193
  "airflow.sdk.execution_time.execute_workload",
199
- "--json-path",
200
- "/tmp/execute/input.json",
194
+ "--json-string",
195
+ content_json,
201
196
  ],
202
197
  pod_override_object=None,
203
198
  base_worker_pod=worker_config,
204
199
  namespace="namespace",
205
200
  scheduler_job_id="uuid",
206
- content_json_for_volume=content_json,
207
201
  )
208
202
  sanitized_result = self.k8s_client.sanitize_for_serialization(result)
209
203
 
210
- init_containers = sanitized_result["spec"]["initContainers"]
211
- assert len(init_containers) == 1
212
- init_container = init_containers[0]
213
- assert init_container == {
214
- "command": [
215
- "/bin/sh",
216
- "-c",
217
- f"echo '{expected}' > /tmp/execute/input.json",
218
- ],
219
- "image": "busybox",
220
- "name": "init-container",
221
- "volumeMounts": [{"mountPath": "/tmp/execute", "name": "execute-volume", "readOnly": False}],
222
- }
223
-
224
- volumes = sanitized_result["spec"]["volumes"]
225
- assert len(volumes) == 1
226
- volume = volumes[0]
227
- assert volume == {"emptyDir": {}, "name": "execute-volume"}
228
-
229
204
  main_container = sanitized_result["spec"]["containers"][0]
230
- assert main_container["command"] == [
205
+
206
+ assert main_container["args"] == [
231
207
  "python",
232
208
  "-m",
233
209
  "airflow.sdk.execution_time.execute_workload",
234
- "--json-path",
210
+ "--json-string",
211
+ expected,
235
212
  ]
236
- assert main_container["args"] == ["/tmp/execute/input.json"]
237
213
 
238
214
  def test_from_obj_pod_override_object(self):
239
215
  obj = {
@@ -24,8 +24,9 @@ import yaml
24
24
  from kubernetes.client import models as k8s
25
25
  from sqlalchemy.orm import make_transient
26
26
 
27
- from airflow.models.renderedtifields import RenderedTaskInstanceFields as RTIF
28
- from airflow.providers.cncf.kubernetes.template_rendering import render_k8s_pod_yaml
27
+ from airflow.models.renderedtifields import RenderedTaskInstanceFields, RenderedTaskInstanceFields as RTIF
28
+ from airflow.providers.cncf.kubernetes.template_rendering import get_rendered_k8s_spec, render_k8s_pod_yaml
29
+ from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
29
30
  from airflow.utils import timezone
30
31
  from airflow.utils.session import create_session
31
32
  from airflow.version import version
@@ -149,6 +150,39 @@ def test_render_k8s_pod_yaml_with_custom_pod_template_and_pod_override(
149
150
  assert ti_pod_yaml["metadata"]["annotations"]["test"] == "annotation"
150
151
 
151
152
 
153
+ @pytest.mark.skipif(
154
+ AIRFLOW_V_3_0_PLUS,
155
+ reason="This test is only needed for Airflow 2 - we can remove it after "
156
+ "only Airflow 3 is supported in providers",
157
+ )
158
+ @mock.patch.dict(os.environ, {"AIRFLOW_IS_K8S_EXECUTOR_POD": "True"})
159
+ @mock.patch.object(RenderedTaskInstanceFields, "get_k8s_pod_yaml")
160
+ @mock.patch("airflow.providers.cncf.kubernetes.template_rendering.render_k8s_pod_yaml")
161
+ def test_get_rendered_k8s_spec(render_k8s_pod_yaml, rtif_get_k8s_pod_yaml, create_task_instance):
162
+ # Create new TI for the same Task
163
+ ti = create_task_instance()
164
+
165
+ mock.patch.object(ti, "render_k8s_pod_yaml", autospec=True)
166
+
167
+ fake_spec = {"ermagawds": "pods"}
168
+
169
+ session = mock.Mock()
170
+
171
+ rtif_get_k8s_pod_yaml.return_value = fake_spec
172
+ assert get_rendered_k8s_spec(ti, session=session) == fake_spec
173
+
174
+ rtif_get_k8s_pod_yaml.assert_called_once_with(ti, session=session)
175
+ render_k8s_pod_yaml.assert_not_called()
176
+
177
+ # Now test that when we _dont_ find it in the DB, it calls render_k8s_pod_yaml
178
+ rtif_get_k8s_pod_yaml.return_value = None
179
+ render_k8s_pod_yaml.return_value = fake_spec
180
+
181
+ assert get_rendered_k8s_spec(session) == fake_spec
182
+
183
+ render_k8s_pod_yaml.assert_called_once()
184
+
185
+
152
186
  @mock.patch.dict(os.environ, {"AIRFLOW_IS_K8S_EXECUTOR_POD": "True"})
153
187
  @mock.patch("airflow.providers.cncf.kubernetes.template_rendering.render_k8s_pod_yaml")
154
188
  def test_get_k8s_pod_yaml(render_k8s_pod_yaml, dag_maker, session):