:py:mod:`airflow.providers.amazon.aws.sensors.eks`
==================================================

.. py:module:: airflow.providers.amazon.aws.sensors.eks

.. autoapi-nested-parse::

   Tracking the state of Amazon EKS Clusters, Amazon EKS managed node groups, and AWS Fargate profiles.



Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.sensors.eks.EksClusterStateSensor
   airflow.providers.amazon.aws.sensors.eks.EksFargateProfileStateSensor
   airflow.providers.amazon.aws.sensors.eks.EksNodegroupStateSensor
   airflow.providers.amazon.aws.sensors.eks.EKSClusterStateSensor
   airflow.providers.amazon.aws.sensors.eks.EKSFargateProfileStateSensor
   airflow.providers.amazon.aws.sensors.eks.EKSNodegroupStateSensor




Attributes
~~~~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.sensors.eks.DEFAULT_CONN_ID
   airflow.providers.amazon.aws.sensors.eks.CLUSTER_TERMINAL_STATES
   airflow.providers.amazon.aws.sensors.eks.FARGATE_TERMINAL_STATES
   airflow.providers.amazon.aws.sensors.eks.NODEGROUP_TERMINAL_STATES
   airflow.providers.amazon.aws.sensors.eks.UNEXPECTED_TERMINAL_STATE_MSG


.. py:data:: DEFAULT_CONN_ID
   :annotation: = aws_default

   

.. py:data:: CLUSTER_TERMINAL_STATES
   

   

.. py:data:: FARGATE_TERMINAL_STATES
   

   

.. py:data:: NODEGROUP_TERMINAL_STATES
   

   

.. py:data:: UNEXPECTED_TERMINAL_STATE_MSG
   :annotation: = Terminal state reached. Current state: {current_state}, Expected state: {target_state}

   

.. py:class:: EksClusterStateSensor(*, cluster_name, target_state = ClusterStates.ACTIVE, aws_conn_id = DEFAULT_CONN_ID, region = None, **kwargs)

   Bases: :py:obj:`airflow.sensors.base.BaseSensorOperator`

   Check the state of an Amazon EKS Cluster until it reaches the target state or another terminal state.

   .. seealso::
       For more information on how to use this sensor, take a look at the guide:
       :ref:`howto/sensor:EksClusterStateSensor`

   :param cluster_name: The name of the Cluster to watch. (templated)
   :param target_state: Target state of the Cluster. (templated)
   :param region: Which AWS region the connection should use. (templated)
       If this is None or empty then the default boto3 behaviour is used.
   :param aws_conn_id: The Airflow connection used for AWS credentials. (templated)
        If this is None or empty then the default boto3 behaviour is used. If
        running Airflow in a distributed manner and aws_conn_id is None or
        empty, then the default boto3 configuration would be used (and must be
        maintained on each worker node).

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['cluster_name', 'target_state', 'aws_conn_id', 'region']

      

   .. py:attribute:: ui_color
      :annotation: = #ff9900

      

   .. py:attribute:: ui_fgcolor
      :annotation: = #232F3E

      

   .. py:method:: poke(self, context)

      Function that the sensors defined while deriving this class should
      override.



.. py:class:: EksFargateProfileStateSensor(*, cluster_name, fargate_profile_name, target_state = FargateProfileStates.ACTIVE, aws_conn_id = DEFAULT_CONN_ID, region = None, **kwargs)

   Bases: :py:obj:`airflow.sensors.base.BaseSensorOperator`

   Check the state of an AWS Fargate profile until it reaches the target state or another terminal state.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/sensor:EksFargateProfileStateSensor`

   :param cluster_name: The name of the Cluster which the AWS Fargate profile is attached to. (templated)
   :param fargate_profile_name: The name of the Fargate profile to watch. (templated)
   :param target_state: Target state of the Fargate profile. (templated)
   :param region: Which AWS region the connection should use. (templated)
       If this is None or empty then the default boto3 behaviour is used.
   :param aws_conn_id: The Airflow connection used for AWS credentials. (templated)
        If this is None or empty then the default boto3 behaviour is used. If
        running Airflow in a distributed manner and aws_conn_id is None or
        empty, then the default boto3 configuration would be used (and must be
        maintained on each worker node).

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['cluster_name', 'fargate_profile_name', 'target_state', 'aws_conn_id', 'region']

      

   .. py:attribute:: ui_color
      :annotation: = #ff9900

      

   .. py:attribute:: ui_fgcolor
      :annotation: = #232F3E

      

   .. py:method:: poke(self, context)

      Function that the sensors defined while deriving this class should
      override.



.. py:class:: EksNodegroupStateSensor(*, cluster_name, nodegroup_name, target_state = NodegroupStates.ACTIVE, aws_conn_id = DEFAULT_CONN_ID, region = None, **kwargs)

   Bases: :py:obj:`airflow.sensors.base.BaseSensorOperator`

   Check the state of an EKS managed node group until it reaches the target state or another terminal state.

   .. seealso::
       For more information on how to use this sensor, take a look at the guide:
       :ref:`howto/sensor:EksNodegroupStateSensor`

   :param cluster_name: The name of the Cluster which the Nodegroup is attached to. (templated)
   :param nodegroup_name: The name of the Nodegroup to watch. (templated)
   :param target_state: Target state of the Nodegroup. (templated)
   :param region: Which AWS region the connection should use. (templated)
       If this is None or empty then the default boto3 behaviour is used.
   :param aws_conn_id: The Airflow connection used for AWS credentials. (templated)
        If this is None or empty then the default boto3 behaviour is used. If
        running Airflow in a distributed manner and aws_conn_id is None or
        empty, then the default boto3 configuration would be used (and must be
        maintained on each worker node).

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['cluster_name', 'nodegroup_name', 'target_state', 'aws_conn_id', 'region']

      

   .. py:attribute:: ui_color
      :annotation: = #ff9900

      

   .. py:attribute:: ui_fgcolor
      :annotation: = #232F3E

      

   .. py:method:: poke(self, context)

      Function that the sensors defined while deriving this class should
      override.



.. py:class:: EKSClusterStateSensor(*args, **kwargs)

   Bases: :py:obj:`EksClusterStateSensor`

   This sensor is deprecated.
   Please use :class:`airflow.providers.amazon.aws.sensors.eks.EksClusterStateSensor`.


.. py:class:: EKSFargateProfileStateSensor(*args, **kwargs)

   Bases: :py:obj:`EksFargateProfileStateSensor`

   This sensor is deprecated.
   Please use :class:`airflow.providers.amazon.aws.sensors.eks.EksFargateProfileStateSensor`.


.. py:class:: EKSNodegroupStateSensor(*args, **kwargs)

   Bases: :py:obj:`EksNodegroupStateSensor`

   This sensor is deprecated.
   Please use :class:`airflow.providers.amazon.aws.sensors.eks.EksNodegroupStateSensor`.


