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.
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/PKG-INFO +1 -1
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/changelog.rst +8 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/pyproject.toml +1 -1
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/README.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/.latest-doc-only-change.txt +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/cli-ref.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/commits.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/conf.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/configurations-ref.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/connections/kubernetes.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/img/arch-diag-kubernetes.png +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/img/arch-diag-kubernetes2.png +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/img/k8s-failed-pod.png +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/img/k8s-happy-path.png +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/index.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/installing-providers-from-sources.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/integration-logos/Kubernetes.png +0 -0
- {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
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/kubernetes_executor.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/local_kubernetes_executor.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/operators.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/redirects.txt +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/docs/security.rst +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/provider.yaml +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/src/airflow/providers/cncf/kubernetes/LICENSE +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/conftest.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/system/cncf/kubernetes/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/__init__.py +0 -0
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {apache_airflow_providers_cncf_kubernetes-10.5.0rc1 → apache_airflow_providers_cncf_kubernetes-10.5.0rc2}/tests/unit/cncf/kubernetes/conftest.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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.
|
|
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.
|
|
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-
|
|
402
|
-
|
|
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 =
|
|
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
|
|
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-
|
|
200
|
-
|
|
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
|
-
|
|
205
|
+
|
|
206
|
+
assert main_container["args"] == [
|
|
231
207
|
"python",
|
|
232
208
|
"-m",
|
|
233
209
|
"airflow.sdk.execution_time.execute_workload",
|
|
234
|
-
"--json-
|
|
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):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|