# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

---
package-name: apache-airflow-providers-cncf-kubernetes
name: Kubernetes
description: |
    `Kubernetes <https://kubernetes.io/>`__

versions:
  - 4.4.1
  - 4.4.0
  - 4.3.0
  - 4.2.0
  - 4.1.0
  - 4.0.2
  - 4.0.1
  - 4.0.0
  - 3.1.2
  - 3.1.1
  - 3.1.0
  - 3.0.2
  - 3.0.1
  - 3.0.0
  - 2.2.0
  - 2.1.0
  - 2.0.3
  - 2.0.2
  - 2.0.1
  - 2.0.0
  - 1.2.0
  - 1.1.0
  - 1.0.2
  - 1.0.1
  - 1.0.0

dependencies:
  - apache-airflow>=2.3.0
  - cryptography>=2.0.0
  # The Kubernetes API is known to introduce problems when upgraded to a MAJOR version. Airflow Core
  # Uses Kubernetes for Kubernetes executor, and we also know that Kubernetes Python client follows SemVer
  # (https://github.com/kubernetes-client/python#compatibility). This is a crucial component of Airflow
  # So we should limit it to the next MAJOR version and only deliberately bump the version when we
  # tested it, and we know it can be bumped. Bumping this version should also be connected with
  # limiting minimum airflow version supported in cncf.kubernetes provider, due to the
  # potential breaking changes in Airflow Core as well (kubernetes is added as extra, so Airflow
  # core is not hard-limited via install-requirements, only by extra).
  - kubernetes>=21.7.0,<24

integrations:
  - integration-name: Kubernetes
    external-doc-url: https://kubernetes.io/
    how-to-guide:
      - /docs/apache-airflow-providers-cncf-kubernetes/operators.rst
    logo: /integration-logos/kubernetes/Kubernetes.png
    tags: [software]
  - integration-name: Spark on Kubernetes
    external-doc-url: https://github.com/GoogleCloudPlatform/spark-on-k8s-operator
    logo: /integration-logos/kubernetes/Spark-On-Kubernetes.png
    tags: [software]

operators:
  - integration-name: Kubernetes
    python-modules:
      - airflow.providers.cncf.kubernetes.operators.kubernetes_pod
      - airflow.providers.cncf.kubernetes.operators.spark_kubernetes

sensors:
  - integration-name: Kubernetes
    python-modules:
      - airflow.providers.cncf.kubernetes.sensors.spark_kubernetes

hooks:
  - integration-name: Kubernetes
    python-modules:
      - airflow.providers.cncf.kubernetes.hooks.kubernetes


connection-types:
  - hook-class-name: airflow.providers.cncf.kubernetes.hooks.kubernetes.KubernetesHook
    connection-type: kubernetes

task-decorators:
  - class-name: airflow.providers.cncf.kubernetes.decorators.kubernetes.kubernetes_task
    name: kubernetes
