Skip to content

Commit 76ca340

Browse files
jason810496rawwarpotiuk
authored andcommitted
Move CNCF Kubernetes to new provider structure (apache#46436)
* Move CNCF Kubernetes to new provider structure * Fix doc include path and k8s test * Fix taskflow tutorial * Fix test_project_structure * Strip src. prefix instead of replacing all src. Co-authored-by: Kalyan R <[email protected]> * Merge fix get_classes_from_file apache#46454 * Fix TestCncfProviderProjectStructure - rename PROVIDER from "cncf" to "cncf/kubernetes" - remove MISSING_EXAMPLES_FOR_CLASSES * Fix k8s CI requirements * fixup! Fix k8s CI requirements --------- Co-authored-by: Kalyan R <[email protected]> Co-authored-by: Jarek Potiuk <[email protected]>
1 parent 6f295d3 commit 76ca340

File tree

156 files changed

+890
-153
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

156 files changed

+890
-153
lines changed

.github/boring-cyborg.yml

+1-8
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,7 @@ labelPRBasedOnFilePath:
102102
- providers/cloudant/**
103103

104104
provider:cncf-kubernetes:
105-
- airflow/example_dags/example_kubernetes_executor.py
106-
- airflow/example_dags/example_local_kubernetes_executor.py
107-
- providers/src/airflow/providers/cncf/kubernetes/**/*
108-
- providers/celery/src/airflow/providers/celery/executors/celery_kubernetes_executor.py
109-
- docs/apache-airflow-providers-cncf-kubernetes/**/*
110-
- kubernetes_tests/**/*
111-
- providers/tests/cncf/kubernetes/**/*
112-
- providers/tests/system/cncf/kubernetes/**/*
105+
- providers/cncf/kubernetes/**
113106

114107
provider:cohere:
115108
- providers/cohere/**

.pre-commit-config.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,7 @@ repos:
665665
^providers/fab/docs/auth-manager/webserver-authentication.rst$|
666666
^providers/google/docs/operators/cloud/kubernetes_engine.rst$|
667667
^docs/apache-airflow-providers-microsoft-azure/connections/azure_cosmos.rst$|
668-
^docs/apache-airflow-providers-cncf-kubernetes/operators.rst$|
668+
^providers/cncf/kubernetes/docs/operators.rst$|
669669
^docs/conf.py$|
670670
^docs/exts/removemarktransform.py$|
671671
^newsfragments/41761.significant.rst$|

dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@ def _rebuild_k8s_image(
601601
602602
COPY --chown=airflow:0 airflow/example_dags/ /opt/airflow/dags/
603603
604-
COPY --chown=airflow:0 providers/src/airflow/providers/cncf/kubernetes/kubernetes_executor_templates/ /opt/airflow/pod_templates/
604+
COPY --chown=airflow:0 providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/kubernetes_executor_templates/ /opt/airflow/pod_templates/
605605
606606
ENV GUNICORN_CMD_ARGS='--preload' AIRFLOW__WEBSERVER__WORKER_REFRESH_INTERVAL=0
607607
"""

docs/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ apache-airflow-providers-asana
1919
apache-airflow-providers-atlassian-jira
2020
apache-airflow-providers-celery
2121
apache-airflow-providers-cloudant
22+
apache-airflow-providers-cncf-kubernetes
2223
apache-airflow-providers-cohere
2324
apache-airflow-providers-common-compat
2425
apache-airflow-providers-common-io

docs/apache-airflow-providers-cncf-kubernetes/changelog.rst

-25
This file was deleted.

docs/apache-airflow/tutorial/taskflow.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ Below is an example of using the ``@task.kubernetes`` decorator to run a Python
338338

339339
.. _taskflow/kubernetes_example:
340340

341-
.. exampleinclude:: /../../providers/tests/system/cncf/kubernetes/example_kubernetes_decorator.py
341+
.. exampleinclude:: /../../providers/cncf/kubernetes/tests/system/cncf/kubernetes/example_kubernetes_decorator.py
342342
:language: python
343343
:dedent: 4
344344
:start-after: [START howto_operator_kubernetes]

providers/cncf/kubernetes/README.rst

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
2+
.. Licensed to the Apache Software Foundation (ASF) under one
3+
or more contributor license agreements. See the NOTICE file
4+
distributed with this work for additional information
5+
regarding copyright ownership. The ASF licenses this file
6+
to you under the Apache License, Version 2.0 (the
7+
"License"); you may not use this file except in compliance
8+
with the License. You may obtain a copy of the License at
9+
10+
.. http://www.apache.org/licenses/LICENSE-2.0
11+
12+
.. Unless required by applicable law or agreed to in writing,
13+
software distributed under the License is distributed on an
14+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
KIND, either express or implied. See the License for the
16+
specific language governing permissions and limitations
17+
under the License.
18+
19+
.. NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE OVERWRITTEN!
20+
21+
.. IF YOU WANT TO MODIFY TEMPLATE FOR THIS FILE, YOU SHOULD MODIFY THE TEMPLATE
22+
`PROVIDER_README_TEMPLATE.rst.jinja2` IN the `dev/breeze/src/airflow_breeze/templates` DIRECTORY
23+
24+
25+
Package ``apache-airflow-providers-cncf-kubernetes``
26+
27+
Release: ``10.1.0``
28+
29+
30+
`Kubernetes <https://kubernetes.io/>`__
31+
32+
33+
Provider package
34+
----------------
35+
36+
This is a provider package for ``cncf.kubernetes`` provider. All classes for this provider package
37+
are in ``airflow.providers.cncf.kubernetes`` python package.
38+
39+
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.1.0/>`_.
41+
42+
Installation
43+
------------
44+
45+
You can install this package on top of an existing Airflow 2 installation (see ``Requirements`` below
46+
for the minimum Airflow version supported) via
47+
``pip install apache-airflow-providers-cncf-kubernetes``
48+
49+
The package supports the following python versions: 3.9,3.10,3.11,3.12
50+
51+
Requirements
52+
------------
53+
54+
====================== =====================
55+
PIP package Version required
56+
====================== =====================
57+
``aiofiles`` ``>=23.2.0``
58+
``apache-airflow`` ``>=2.9.0``
59+
``asgiref`` ``>=3.5.2``
60+
``cryptography`` ``>=41.0.0``
61+
``kubernetes`` ``>=29.0.0,<=31.0.0``
62+
``kubernetes_asyncio`` ``>=29.0.0,<=31.0.0``
63+
``google-re2`` ``>=1.0``
64+
====================== =====================
65+
66+
The changelog for the provider package can be found in the
67+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.1.0/changelog.html>`_.

docs/apache-airflow-providers-cncf-kubernetes/kubernetes_executor.rst providers/cncf/kubernetes/docs/kubernetes_executor.rst

+3-3
Original file line numberDiff line numberDiff line change
@@ -108,21 +108,21 @@ With these requirements in mind, here are some examples of basic ``pod_template_
108108

109109
Storing DAGs in the image:
110110

111-
.. literalinclude:: /../../providers/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_image_template.yaml
111+
.. literalinclude:: /../../providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_image_template.yaml
112112
:language: yaml
113113
:start-after: [START template_with_dags_in_image]
114114
:end-before: [END template_with_dags_in_image]
115115

116116
Storing DAGs in a ``persistentVolume``:
117117

118-
.. literalinclude:: /../../providers/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_volume_template.yaml
118+
.. literalinclude:: /../../providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/dags_in_volume_template.yaml
119119
:language: yaml
120120
:start-after: [START template_with_dags_in_volume]
121121
:end-before: [END template_with_dags_in_volume]
122122

123123
Pulling DAGs from ``git``:
124124

125-
.. literalinclude:: /../../providers/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/git_sync_template.yaml
125+
.. literalinclude:: /../../providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/pod_template_file_examples/git_sync_template.yaml
126126
:language: yaml
127127
:start-after: [START git_sync_template]
128128
:end-before: [END git_sync_template]

docs/apache-airflow-providers-cncf-kubernetes/operators.rst providers/cncf/kubernetes/docs/operators.rst

+12-12
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ Using this method will ensure correctness
102102
and type safety. While we have removed almost all Kubernetes convenience classes, we have kept the
103103
:class:`~airflow.providers.cncf.kubernetes.secret.Secret` class to simplify the process of generating secret volumes/env variables.
104104

105-
.. exampleinclude:: /../../providers/tests/system/cncf/kubernetes/example_kubernetes.py
105+
.. exampleinclude:: /../../providers/cncf/kubernetes/tests/system/cncf/kubernetes/example_kubernetes.py
106106
:language: python
107107
:start-after: [START howto_operator_k8s_cluster_resources]
108108
:end-before: [END howto_operator_k8s_cluster_resources]
@@ -135,21 +135,21 @@ Create the Secret using ``kubectl``:
135135
136136
Then use it in your pod like so:
137137

138-
.. exampleinclude:: /../../providers/tests/system/cncf/kubernetes/example_kubernetes.py
138+
.. exampleinclude:: /../../providers/cncf/kubernetes/tests/system/cncf/kubernetes/example_kubernetes.py
139139
:language: python
140140
:start-after: [START howto_operator_k8s_private_image]
141141
:end-before: [END howto_operator_k8s_private_image]
142142

143143
Also for this action you can use operator in the deferrable mode:
144144

145-
.. exampleinclude:: /../../providers/tests/system/cncf/kubernetes/example_kubernetes_async.py
145+
.. exampleinclude:: /../../providers/cncf/kubernetes/tests/system/cncf/kubernetes/example_kubernetes_async.py
146146
:language: python
147147
:start-after: [START howto_operator_k8s_private_image_async]
148148
:end-before: [END howto_operator_k8s_private_image_async]
149149

150150
Example to fetch and display container log periodically
151151

152-
.. exampleinclude:: /../../providers/tests/system/cncf/kubernetes/example_kubernetes_async.py
152+
.. exampleinclude:: /../../providers/cncf/kubernetes/tests/system/cncf/kubernetes/example_kubernetes_async.py
153153
:language: python
154154
:start-after: [START howto_operator_async_log]
155155
:end-before: [END howto_operator_async_log]
@@ -168,7 +168,7 @@ alongside the Pod. The Pod must write the XCom value into this location at the `
168168

169169
See the following example on how this occurs:
170170

171-
.. exampleinclude:: /../../providers/tests/system/cncf/kubernetes/example_kubernetes.py
171+
.. exampleinclude:: /../../providers/cncf/kubernetes/tests/system/cncf/kubernetes/example_kubernetes.py
172172
:language: python
173173
:start-after: [START howto_operator_k8s_write_xcom]
174174
:end-before: [END howto_operator_k8s_write_xcom]
@@ -177,7 +177,7 @@ See the following example on how this occurs:
177177

178178
Also for this action you can use operator in the deferrable mode:
179179

180-
.. exampleinclude:: /../../providers/tests/system/cncf/kubernetes/example_kubernetes_async.py
180+
.. exampleinclude:: /../../providers/cncf/kubernetes/tests/system/cncf/kubernetes/example_kubernetes_async.py
181181
:language: python
182182
:start-after: [START howto_operator_k8s_write_xcom_async]
183183
:end-before: [END howto_operator_k8s_write_xcom_async]
@@ -621,15 +621,15 @@ request that dynamically launches this Job.
621621
Users can specify a kubeconfig file using the ``config_file`` parameter, otherwise the operator will default
622622
to ``~/.kube/config``. It also allows users to supply a template YAML file using the ``job_template_file`` parameter.
623623

624-
.. exampleinclude:: /../../providers/tests/system/cncf/kubernetes/example_kubernetes_job.py
624+
.. exampleinclude:: /../../providers/cncf/kubernetes/tests/system/cncf/kubernetes/example_kubernetes_job.py
625625
:language: python
626626
:dedent: 4
627627
:start-after: [START howto_operator_k8s_job]
628628
:end-before: [END howto_operator_k8s_job]
629629

630630
The :class:`~airflow.providers.cncf.kubernetes.operators.job.KubernetesJobOperator` also supports deferrable mode:
631631

632-
.. exampleinclude:: /../../providers/tests/system/cncf/kubernetes/example_kubernetes_job.py
632+
.. exampleinclude:: /../../providers/cncf/kubernetes/tests/system/cncf/kubernetes/example_kubernetes_job.py
633633
:language: python
634634
:dedent: 4
635635
:start-after: [START howto_operator_k8s_job_deferrable]
@@ -656,7 +656,7 @@ KubernetesDeleteJobOperator
656656
The :class:`~airflow.providers.cncf.kubernetes.operators.job.KubernetesDeleteJobOperator` allows
657657
you to delete Jobs on a Kubernetes cluster.
658658

659-
.. exampleinclude:: /../../providers/tests/system/cncf/kubernetes/example_kubernetes_job.py
659+
.. exampleinclude:: /../../providers/cncf/kubernetes/tests/system/cncf/kubernetes/example_kubernetes_job.py
660660
:language: python
661661
:dedent: 4
662662
:start-after: [START howto_operator_delete_k8s_job]
@@ -671,7 +671,7 @@ KubernetesPatchJobOperator
671671
The :class:`~airflow.providers.cncf.kubernetes.operators.job.KubernetesPatchJobOperator` allows
672672
you to update Jobs on a Kubernetes cluster.
673673

674-
.. exampleinclude:: /../../providers/tests/system/cncf/kubernetes/example_kubernetes_job.py
674+
.. exampleinclude:: /../../providers/cncf/kubernetes/tests/system/cncf/kubernetes/example_kubernetes_job.py
675675
:language: python
676676
:dedent: 4
677677
:start-after: [START howto_operator_update_job]
@@ -686,7 +686,7 @@ KubernetesInstallKueueOperator
686686
The :class:`~airflow.providers.cncf.kubernetes.operators.kueue.KubernetesInstallKueueOperator` allows
687687
you to install the Kueue component in a Kubernetes cluster
688688

689-
.. exampleinclude:: /../../providers/tests/system/cncf/kubernetes/example_kubernetes_kueue.py
689+
.. exampleinclude:: /../../providers/cncf/kubernetes/tests/system/cncf/kubernetes/example_kubernetes_kueue.py
690690
:language: python
691691
:dedent: 4
692692
:start-after: [START howto_operator_k8s_kueue_install]
@@ -709,7 +709,7 @@ KubernetesStartKueueJobOperator
709709
The :class:`~airflow.providers.cncf.kubernetes.operators.kueue.KubernetesStartKueueJobOperator` allows
710710
you to start a Kueue job in a Kubernetes cluster
711711

712-
.. exampleinclude:: /../../providers/tests/system/cncf/kubernetes/example_kubernetes_kueue.py
712+
.. exampleinclude:: /../../providers/cncf/kubernetes/tests/system/cncf/kubernetes/example_kubernetes_kueue.py
713713
:language: python
714714
:dedent: 4
715715
:start-after: [START howto_operator_k8s_install_kueue]

providers/src/airflow/providers/cncf/kubernetes/provider.yaml providers/cncf/kubernetes/provider.yaml

+2-24
Original file line numberDiff line numberDiff line change
@@ -95,38 +95,16 @@ versions:
9595
- 1.0.1
9696
- 1.0.0
9797

98-
dependencies:
99-
- aiofiles>=23.2.0
100-
- apache-airflow>=2.9.0
101-
- asgiref>=3.5.2
102-
- cryptography>=41.0.0
103-
# The Kubernetes API is known to introduce problems when upgraded to a MAJOR version. Airflow Core
104-
# Uses Kubernetes for Kubernetes executor, and we also know that Kubernetes Python client follows SemVer
105-
# (https://github.com/kubernetes-client/python#compatibility). This is a crucial component of Airflow
106-
# So we should limit it to the next MAJOR version and only deliberately bump the version when we
107-
# tested it, and we know it can be bumped. Bumping this version should also be connected with
108-
# limiting minimum airflow version supported in cncf.kubernetes provider, due to the
109-
# potential breaking changes in Airflow Core as well (kubernetes is added as extra, so Airflow
110-
# core is not hard-limited via install-requirements, only by extra).
111-
- kubernetes>=29.0.0,<=31.0.0
112-
# The Kubernetes_asyncio package is used for providing Asynchronous (AsyncIO) client library for
113-
# standard Kubernetes API. The version is limited by minimum 18.20.1 because of introducing the ability to
114-
# load kubernetes config file from dictionary in that release and is limited to the next MAJOR version
115-
# (started from current 24.2.2 version) to prevent introducing some problems that could be due to some
116-
# major changes in the package.
117-
- kubernetes_asyncio>=29.0.0,<=31.0.0
118-
- google-re2>=1.0
119-
12098
integrations:
12199
- integration-name: Kubernetes
122100
external-doc-url: https://kubernetes.io/
123101
how-to-guide:
124102
- /docs/apache-airflow-providers-cncf-kubernetes/operators.rst
125-
logo: /integration-logos/kubernetes/Kubernetes.png
103+
logo: /docs/integration-logos/Kubernetes.png
126104
tags: [software]
127105
- integration-name: Spark on Kubernetes
128106
external-doc-url: https://github.com/GoogleCloudPlatform/spark-on-k8s-operator
129-
logo: /integration-logos/kubernetes/Spark-On-Kubernetes.png
107+
logo: /docs/integration-logos/Spark-On-Kubernetes.png
130108
tags: [software]
131109

132110
operators:

0 commit comments

Comments
 (0)