{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.EKS.Types.Cluster
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.EKS.Types.Cluster where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EKS.Types.Certificate
import Amazonka.EKS.Types.ClusterHealth
import Amazonka.EKS.Types.ClusterStatus
import Amazonka.EKS.Types.ConnectorConfigResponse
import Amazonka.EKS.Types.EncryptionConfig
import Amazonka.EKS.Types.Identity
import Amazonka.EKS.Types.KubernetesNetworkConfigResponse
import Amazonka.EKS.Types.Logging
import Amazonka.EKS.Types.OutpostConfigResponse
import Amazonka.EKS.Types.VpcConfigResponse
import qualified Amazonka.Prelude as Prelude

-- | An object representing an Amazon EKS cluster.
--
-- /See:/ 'newCluster' smart constructor.
data Cluster = Cluster'
  { -- | The Amazon Resource Name (ARN) of the cluster.
    Cluster -> Maybe Text
arn :: Prelude.Maybe Prelude.Text,
    -- | The @certificate-authority-data@ for your cluster.
    Cluster -> Maybe Certificate
certificateAuthority :: Prelude.Maybe Certificate,
    -- | Unique, case-sensitive identifier that you provide to ensure the
    -- idempotency of the request.
    Cluster -> Maybe Text
clientRequestToken :: Prelude.Maybe Prelude.Text,
    -- | The configuration used to connect to a cluster for registration.
    Cluster -> Maybe ConnectorConfigResponse
connectorConfig :: Prelude.Maybe ConnectorConfigResponse,
    -- | The Unix epoch timestamp in seconds for when the cluster was created.
    Cluster -> Maybe POSIX
createdAt :: Prelude.Maybe Data.POSIX,
    -- | The encryption configuration for the cluster.
    Cluster -> Maybe [EncryptionConfig]
encryptionConfig :: Prelude.Maybe [EncryptionConfig],
    -- | The endpoint for your Kubernetes API server.
    Cluster -> Maybe Text
endpoint :: Prelude.Maybe Prelude.Text,
    -- | An object representing the health of your local Amazon EKS cluster on an
    -- Amazon Web Services Outpost. This object isn\'t available for clusters
    -- on the Amazon Web Services cloud.
    Cluster -> Maybe ClusterHealth
health :: Prelude.Maybe ClusterHealth,
    -- | The ID of your local Amazon EKS cluster on an Amazon Web Services
    -- Outpost. This property isn\'t available for an Amazon EKS cluster on the
    -- Amazon Web Services cloud.
    Cluster -> Maybe Text
id :: Prelude.Maybe Prelude.Text,
    -- | The identity provider information for the cluster.
    Cluster -> Maybe Identity
identity :: Prelude.Maybe Identity,
    -- | The Kubernetes network configuration for the cluster.
    Cluster -> Maybe KubernetesNetworkConfigResponse
kubernetesNetworkConfig :: Prelude.Maybe KubernetesNetworkConfigResponse,
    -- | The logging configuration for your cluster.
    Cluster -> Maybe Logging
logging :: Prelude.Maybe Logging,
    -- | The name of the cluster.
    Cluster -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | An object representing the configuration of your local Amazon EKS
    -- cluster on an Amazon Web Services Outpost. This object isn\'t available
    -- for clusters on the Amazon Web Services cloud.
    Cluster -> Maybe OutpostConfigResponse
outpostConfig :: Prelude.Maybe OutpostConfigResponse,
    -- | The platform version of your Amazon EKS cluster. For more information,
    -- see
    -- <https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html Platform Versions>
    -- in the //Amazon EKS User Guide// .
    Cluster -> Maybe Text
platformVersion :: Prelude.Maybe Prelude.Text,
    -- | The VPC configuration used by the cluster control plane. Amazon EKS VPC
    -- resources have specific requirements to work properly with Kubernetes.
    -- For more information, see
    -- <https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html Cluster VPC Considerations>
    -- and
    -- <https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html Cluster Security Group Considerations>
    -- in the /Amazon EKS User Guide/.
    Cluster -> Maybe VpcConfigResponse
resourcesVpcConfig :: Prelude.Maybe VpcConfigResponse,
    -- | The Amazon Resource Name (ARN) of the IAM role that provides permissions
    -- for the Kubernetes control plane to make calls to Amazon Web Services
    -- API operations on your behalf.
    Cluster -> Maybe Text
roleArn :: Prelude.Maybe Prelude.Text,
    -- | The current status of the cluster.
    Cluster -> Maybe ClusterStatus
status :: Prelude.Maybe ClusterStatus,
    -- | The metadata that you apply to the cluster to assist with categorization
    -- and organization. Each tag consists of a key and an optional value. You
    -- define both. Cluster tags do not propagate to any other resources
    -- associated with the cluster.
    Cluster -> Maybe (HashMap Text Text)
tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The Kubernetes server version for the cluster.
    Cluster -> Maybe Text
version :: Prelude.Maybe Prelude.Text
  }
  deriving (Cluster -> Cluster -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Cluster -> Cluster -> Bool
$c/= :: Cluster -> Cluster -> Bool
== :: Cluster -> Cluster -> Bool
$c== :: Cluster -> Cluster -> Bool
Prelude.Eq, ReadPrec [Cluster]
ReadPrec Cluster
Int -> ReadS Cluster
ReadS [Cluster]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Cluster]
$creadListPrec :: ReadPrec [Cluster]
readPrec :: ReadPrec Cluster
$creadPrec :: ReadPrec Cluster
readList :: ReadS [Cluster]
$creadList :: ReadS [Cluster]
readsPrec :: Int -> ReadS Cluster
$creadsPrec :: Int -> ReadS Cluster
Prelude.Read, Int -> Cluster -> ShowS
[Cluster] -> ShowS
Cluster -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Cluster] -> ShowS
$cshowList :: [Cluster] -> ShowS
show :: Cluster -> String
$cshow :: Cluster -> String
showsPrec :: Int -> Cluster -> ShowS
$cshowsPrec :: Int -> Cluster -> ShowS
Prelude.Show, forall x. Rep Cluster x -> Cluster
forall x. Cluster -> Rep Cluster x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Cluster x -> Cluster
$cfrom :: forall x. Cluster -> Rep Cluster x
Prelude.Generic)

-- |
-- Create a value of 'Cluster' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'arn', 'cluster_arn' - The Amazon Resource Name (ARN) of the cluster.
--
-- 'certificateAuthority', 'cluster_certificateAuthority' - The @certificate-authority-data@ for your cluster.
--
-- 'clientRequestToken', 'cluster_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request.
--
-- 'connectorConfig', 'cluster_connectorConfig' - The configuration used to connect to a cluster for registration.
--
-- 'createdAt', 'cluster_createdAt' - The Unix epoch timestamp in seconds for when the cluster was created.
--
-- 'encryptionConfig', 'cluster_encryptionConfig' - The encryption configuration for the cluster.
--
-- 'endpoint', 'cluster_endpoint' - The endpoint for your Kubernetes API server.
--
-- 'health', 'cluster_health' - An object representing the health of your local Amazon EKS cluster on an
-- Amazon Web Services Outpost. This object isn\'t available for clusters
-- on the Amazon Web Services cloud.
--
-- 'id', 'cluster_id' - The ID of your local Amazon EKS cluster on an Amazon Web Services
-- Outpost. This property isn\'t available for an Amazon EKS cluster on the
-- Amazon Web Services cloud.
--
-- 'identity', 'cluster_identity' - The identity provider information for the cluster.
--
-- 'kubernetesNetworkConfig', 'cluster_kubernetesNetworkConfig' - The Kubernetes network configuration for the cluster.
--
-- 'logging', 'cluster_logging' - The logging configuration for your cluster.
--
-- 'name', 'cluster_name' - The name of the cluster.
--
-- 'outpostConfig', 'cluster_outpostConfig' - An object representing the configuration of your local Amazon EKS
-- cluster on an Amazon Web Services Outpost. This object isn\'t available
-- for clusters on the Amazon Web Services cloud.
--
-- 'platformVersion', 'cluster_platformVersion' - The platform version of your Amazon EKS cluster. For more information,
-- see
-- <https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html Platform Versions>
-- in the //Amazon EKS User Guide// .
--
-- 'resourcesVpcConfig', 'cluster_resourcesVpcConfig' - The VPC configuration used by the cluster control plane. Amazon EKS VPC
-- resources have specific requirements to work properly with Kubernetes.
-- For more information, see
-- <https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html Cluster VPC Considerations>
-- and
-- <https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html Cluster Security Group Considerations>
-- in the /Amazon EKS User Guide/.
--
-- 'roleArn', 'cluster_roleArn' - The Amazon Resource Name (ARN) of the IAM role that provides permissions
-- for the Kubernetes control plane to make calls to Amazon Web Services
-- API operations on your behalf.
--
-- 'status', 'cluster_status' - The current status of the cluster.
--
-- 'tags', 'cluster_tags' - The metadata that you apply to the cluster to assist with categorization
-- and organization. Each tag consists of a key and an optional value. You
-- define both. Cluster tags do not propagate to any other resources
-- associated with the cluster.
--
-- 'version', 'cluster_version' - The Kubernetes server version for the cluster.
newCluster ::
  Cluster
newCluster :: Cluster
newCluster =
  Cluster'
    { $sel:arn:Cluster' :: Maybe Text
arn = forall a. Maybe a
Prelude.Nothing,
      $sel:certificateAuthority:Cluster' :: Maybe Certificate
certificateAuthority = forall a. Maybe a
Prelude.Nothing,
      $sel:clientRequestToken:Cluster' :: Maybe Text
clientRequestToken = forall a. Maybe a
Prelude.Nothing,
      $sel:connectorConfig:Cluster' :: Maybe ConnectorConfigResponse
connectorConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:createdAt:Cluster' :: Maybe POSIX
createdAt = forall a. Maybe a
Prelude.Nothing,
      $sel:encryptionConfig:Cluster' :: Maybe [EncryptionConfig]
encryptionConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:endpoint:Cluster' :: Maybe Text
endpoint = forall a. Maybe a
Prelude.Nothing,
      $sel:health:Cluster' :: Maybe ClusterHealth
health = forall a. Maybe a
Prelude.Nothing,
      $sel:id:Cluster' :: Maybe Text
id = forall a. Maybe a
Prelude.Nothing,
      $sel:identity:Cluster' :: Maybe Identity
identity = forall a. Maybe a
Prelude.Nothing,
      $sel:kubernetesNetworkConfig:Cluster' :: Maybe KubernetesNetworkConfigResponse
kubernetesNetworkConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:logging:Cluster' :: Maybe Logging
logging = forall a. Maybe a
Prelude.Nothing,
      $sel:name:Cluster' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:outpostConfig:Cluster' :: Maybe OutpostConfigResponse
outpostConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:platformVersion:Cluster' :: Maybe Text
platformVersion = forall a. Maybe a
Prelude.Nothing,
      $sel:resourcesVpcConfig:Cluster' :: Maybe VpcConfigResponse
resourcesVpcConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:roleArn:Cluster' :: Maybe Text
roleArn = forall a. Maybe a
Prelude.Nothing,
      $sel:status:Cluster' :: Maybe ClusterStatus
status = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:Cluster' :: Maybe (HashMap Text Text)
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:version:Cluster' :: Maybe Text
version = forall a. Maybe a
Prelude.Nothing
    }

-- | The Amazon Resource Name (ARN) of the cluster.
cluster_arn :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_arn :: Lens' Cluster (Maybe Text)
cluster_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
arn :: Maybe Text
$sel:arn:Cluster' :: Cluster -> Maybe Text
arn} -> Maybe Text
arn) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:arn:Cluster' :: Maybe Text
arn = Maybe Text
a} :: Cluster)

-- | The @certificate-authority-data@ for your cluster.
cluster_certificateAuthority :: Lens.Lens' Cluster (Prelude.Maybe Certificate)
cluster_certificateAuthority :: Lens' Cluster (Maybe Certificate)
cluster_certificateAuthority = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Certificate
certificateAuthority :: Maybe Certificate
$sel:certificateAuthority:Cluster' :: Cluster -> Maybe Certificate
certificateAuthority} -> Maybe Certificate
certificateAuthority) (\s :: Cluster
s@Cluster' {} Maybe Certificate
a -> Cluster
s {$sel:certificateAuthority:Cluster' :: Maybe Certificate
certificateAuthority = Maybe Certificate
a} :: Cluster)

-- | Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request.
cluster_clientRequestToken :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_clientRequestToken :: Lens' Cluster (Maybe Text)
cluster_clientRequestToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
clientRequestToken :: Maybe Text
$sel:clientRequestToken:Cluster' :: Cluster -> Maybe Text
clientRequestToken} -> Maybe Text
clientRequestToken) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:clientRequestToken:Cluster' :: Maybe Text
clientRequestToken = Maybe Text
a} :: Cluster)

-- | The configuration used to connect to a cluster for registration.
cluster_connectorConfig :: Lens.Lens' Cluster (Prelude.Maybe ConnectorConfigResponse)
cluster_connectorConfig :: Lens' Cluster (Maybe ConnectorConfigResponse)
cluster_connectorConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe ConnectorConfigResponse
connectorConfig :: Maybe ConnectorConfigResponse
$sel:connectorConfig:Cluster' :: Cluster -> Maybe ConnectorConfigResponse
connectorConfig} -> Maybe ConnectorConfigResponse
connectorConfig) (\s :: Cluster
s@Cluster' {} Maybe ConnectorConfigResponse
a -> Cluster
s {$sel:connectorConfig:Cluster' :: Maybe ConnectorConfigResponse
connectorConfig = Maybe ConnectorConfigResponse
a} :: Cluster)

-- | The Unix epoch timestamp in seconds for when the cluster was created.
cluster_createdAt :: Lens.Lens' Cluster (Prelude.Maybe Prelude.UTCTime)
cluster_createdAt :: Lens' Cluster (Maybe UTCTime)
cluster_createdAt = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe POSIX
createdAt :: Maybe POSIX
$sel:createdAt:Cluster' :: Cluster -> Maybe POSIX
createdAt} -> Maybe POSIX
createdAt) (\s :: Cluster
s@Cluster' {} Maybe POSIX
a -> Cluster
s {$sel:createdAt:Cluster' :: Maybe POSIX
createdAt = Maybe POSIX
a} :: Cluster) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The encryption configuration for the cluster.
cluster_encryptionConfig :: Lens.Lens' Cluster (Prelude.Maybe [EncryptionConfig])
cluster_encryptionConfig :: Lens' Cluster (Maybe [EncryptionConfig])
cluster_encryptionConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe [EncryptionConfig]
encryptionConfig :: Maybe [EncryptionConfig]
$sel:encryptionConfig:Cluster' :: Cluster -> Maybe [EncryptionConfig]
encryptionConfig} -> Maybe [EncryptionConfig]
encryptionConfig) (\s :: Cluster
s@Cluster' {} Maybe [EncryptionConfig]
a -> Cluster
s {$sel:encryptionConfig:Cluster' :: Maybe [EncryptionConfig]
encryptionConfig = Maybe [EncryptionConfig]
a} :: Cluster) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The endpoint for your Kubernetes API server.
cluster_endpoint :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_endpoint :: Lens' Cluster (Maybe Text)
cluster_endpoint = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
endpoint :: Maybe Text
$sel:endpoint:Cluster' :: Cluster -> Maybe Text
endpoint} -> Maybe Text
endpoint) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:endpoint:Cluster' :: Maybe Text
endpoint = Maybe Text
a} :: Cluster)

-- | An object representing the health of your local Amazon EKS cluster on an
-- Amazon Web Services Outpost. This object isn\'t available for clusters
-- on the Amazon Web Services cloud.
cluster_health :: Lens.Lens' Cluster (Prelude.Maybe ClusterHealth)
cluster_health :: Lens' Cluster (Maybe ClusterHealth)
cluster_health = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe ClusterHealth
health :: Maybe ClusterHealth
$sel:health:Cluster' :: Cluster -> Maybe ClusterHealth
health} -> Maybe ClusterHealth
health) (\s :: Cluster
s@Cluster' {} Maybe ClusterHealth
a -> Cluster
s {$sel:health:Cluster' :: Maybe ClusterHealth
health = Maybe ClusterHealth
a} :: Cluster)

-- | The ID of your local Amazon EKS cluster on an Amazon Web Services
-- Outpost. This property isn\'t available for an Amazon EKS cluster on the
-- Amazon Web Services cloud.
cluster_id :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_id :: Lens' Cluster (Maybe Text)
cluster_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
id :: Maybe Text
$sel:id:Cluster' :: Cluster -> Maybe Text
id} -> Maybe Text
id) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:id:Cluster' :: Maybe Text
id = Maybe Text
a} :: Cluster)

-- | The identity provider information for the cluster.
cluster_identity :: Lens.Lens' Cluster (Prelude.Maybe Identity)
cluster_identity :: Lens' Cluster (Maybe Identity)
cluster_identity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Identity
identity :: Maybe Identity
$sel:identity:Cluster' :: Cluster -> Maybe Identity
identity} -> Maybe Identity
identity) (\s :: Cluster
s@Cluster' {} Maybe Identity
a -> Cluster
s {$sel:identity:Cluster' :: Maybe Identity
identity = Maybe Identity
a} :: Cluster)

-- | The Kubernetes network configuration for the cluster.
cluster_kubernetesNetworkConfig :: Lens.Lens' Cluster (Prelude.Maybe KubernetesNetworkConfigResponse)
cluster_kubernetesNetworkConfig :: Lens' Cluster (Maybe KubernetesNetworkConfigResponse)
cluster_kubernetesNetworkConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe KubernetesNetworkConfigResponse
kubernetesNetworkConfig :: Maybe KubernetesNetworkConfigResponse
$sel:kubernetesNetworkConfig:Cluster' :: Cluster -> Maybe KubernetesNetworkConfigResponse
kubernetesNetworkConfig} -> Maybe KubernetesNetworkConfigResponse
kubernetesNetworkConfig) (\s :: Cluster
s@Cluster' {} Maybe KubernetesNetworkConfigResponse
a -> Cluster
s {$sel:kubernetesNetworkConfig:Cluster' :: Maybe KubernetesNetworkConfigResponse
kubernetesNetworkConfig = Maybe KubernetesNetworkConfigResponse
a} :: Cluster)

-- | The logging configuration for your cluster.
cluster_logging :: Lens.Lens' Cluster (Prelude.Maybe Logging)
cluster_logging :: Lens' Cluster (Maybe Logging)
cluster_logging = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Logging
logging :: Maybe Logging
$sel:logging:Cluster' :: Cluster -> Maybe Logging
logging} -> Maybe Logging
logging) (\s :: Cluster
s@Cluster' {} Maybe Logging
a -> Cluster
s {$sel:logging:Cluster' :: Maybe Logging
logging = Maybe Logging
a} :: Cluster)

-- | The name of the cluster.
cluster_name :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_name :: Lens' Cluster (Maybe Text)
cluster_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
name :: Maybe Text
$sel:name:Cluster' :: Cluster -> Maybe Text
name} -> Maybe Text
name) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:name:Cluster' :: Maybe Text
name = Maybe Text
a} :: Cluster)

-- | An object representing the configuration of your local Amazon EKS
-- cluster on an Amazon Web Services Outpost. This object isn\'t available
-- for clusters on the Amazon Web Services cloud.
cluster_outpostConfig :: Lens.Lens' Cluster (Prelude.Maybe OutpostConfigResponse)
cluster_outpostConfig :: Lens' Cluster (Maybe OutpostConfigResponse)
cluster_outpostConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe OutpostConfigResponse
outpostConfig :: Maybe OutpostConfigResponse
$sel:outpostConfig:Cluster' :: Cluster -> Maybe OutpostConfigResponse
outpostConfig} -> Maybe OutpostConfigResponse
outpostConfig) (\s :: Cluster
s@Cluster' {} Maybe OutpostConfigResponse
a -> Cluster
s {$sel:outpostConfig:Cluster' :: Maybe OutpostConfigResponse
outpostConfig = Maybe OutpostConfigResponse
a} :: Cluster)

-- | The platform version of your Amazon EKS cluster. For more information,
-- see
-- <https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html Platform Versions>
-- in the //Amazon EKS User Guide// .
cluster_platformVersion :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_platformVersion :: Lens' Cluster (Maybe Text)
cluster_platformVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
platformVersion :: Maybe Text
$sel:platformVersion:Cluster' :: Cluster -> Maybe Text
platformVersion} -> Maybe Text
platformVersion) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:platformVersion:Cluster' :: Maybe Text
platformVersion = Maybe Text
a} :: Cluster)

-- | The VPC configuration used by the cluster control plane. Amazon EKS VPC
-- resources have specific requirements to work properly with Kubernetes.
-- For more information, see
-- <https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html Cluster VPC Considerations>
-- and
-- <https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html Cluster Security Group Considerations>
-- in the /Amazon EKS User Guide/.
cluster_resourcesVpcConfig :: Lens.Lens' Cluster (Prelude.Maybe VpcConfigResponse)
cluster_resourcesVpcConfig :: Lens' Cluster (Maybe VpcConfigResponse)
cluster_resourcesVpcConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe VpcConfigResponse
resourcesVpcConfig :: Maybe VpcConfigResponse
$sel:resourcesVpcConfig:Cluster' :: Cluster -> Maybe VpcConfigResponse
resourcesVpcConfig} -> Maybe VpcConfigResponse
resourcesVpcConfig) (\s :: Cluster
s@Cluster' {} Maybe VpcConfigResponse
a -> Cluster
s {$sel:resourcesVpcConfig:Cluster' :: Maybe VpcConfigResponse
resourcesVpcConfig = Maybe VpcConfigResponse
a} :: Cluster)

-- | The Amazon Resource Name (ARN) of the IAM role that provides permissions
-- for the Kubernetes control plane to make calls to Amazon Web Services
-- API operations on your behalf.
cluster_roleArn :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_roleArn :: Lens' Cluster (Maybe Text)
cluster_roleArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
roleArn :: Maybe Text
$sel:roleArn:Cluster' :: Cluster -> Maybe Text
roleArn} -> Maybe Text
roleArn) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:roleArn:Cluster' :: Maybe Text
roleArn = Maybe Text
a} :: Cluster)

-- | The current status of the cluster.
cluster_status :: Lens.Lens' Cluster (Prelude.Maybe ClusterStatus)
cluster_status :: Lens' Cluster (Maybe ClusterStatus)
cluster_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe ClusterStatus
status :: Maybe ClusterStatus
$sel:status:Cluster' :: Cluster -> Maybe ClusterStatus
status} -> Maybe ClusterStatus
status) (\s :: Cluster
s@Cluster' {} Maybe ClusterStatus
a -> Cluster
s {$sel:status:Cluster' :: Maybe ClusterStatus
status = Maybe ClusterStatus
a} :: Cluster)

-- | The metadata that you apply to the cluster to assist with categorization
-- and organization. Each tag consists of a key and an optional value. You
-- define both. Cluster tags do not propagate to any other resources
-- associated with the cluster.
cluster_tags :: Lens.Lens' Cluster (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
cluster_tags :: Lens' Cluster (Maybe (HashMap Text Text))
cluster_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe (HashMap Text Text)
tags :: Maybe (HashMap Text Text)
$sel:tags:Cluster' :: Cluster -> Maybe (HashMap Text Text)
tags} -> Maybe (HashMap Text Text)
tags) (\s :: Cluster
s@Cluster' {} Maybe (HashMap Text Text)
a -> Cluster
s {$sel:tags:Cluster' :: Maybe (HashMap Text Text)
tags = Maybe (HashMap Text Text)
a} :: Cluster) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The Kubernetes server version for the cluster.
cluster_version :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_version :: Lens' Cluster (Maybe Text)
cluster_version = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
version :: Maybe Text
$sel:version:Cluster' :: Cluster -> Maybe Text
version} -> Maybe Text
version) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:version:Cluster' :: Maybe Text
version = Maybe Text
a} :: Cluster)

instance Data.FromJSON Cluster where
  parseJSON :: Value -> Parser Cluster
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Cluster"
      ( \Object
x ->
          Maybe Text
-> Maybe Certificate
-> Maybe Text
-> Maybe ConnectorConfigResponse
-> Maybe POSIX
-> Maybe [EncryptionConfig]
-> Maybe Text
-> Maybe ClusterHealth
-> Maybe Text
-> Maybe Identity
-> Maybe KubernetesNetworkConfigResponse
-> Maybe Logging
-> Maybe Text
-> Maybe OutpostConfigResponse
-> Maybe Text
-> Maybe VpcConfigResponse
-> Maybe Text
-> Maybe ClusterStatus
-> Maybe (HashMap Text Text)
-> Maybe Text
-> Cluster
Cluster'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"arn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"certificateAuthority")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"clientRequestToken")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"connectorConfig")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"createdAt")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"encryptionConfig"
                            forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"endpoint")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"health")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"id")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"identity")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"kubernetesNetworkConfig")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"logging")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"name")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"outpostConfig")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"platformVersion")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"resourcesVpcConfig")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"roleArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"status")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"tags" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"version")
      )

instance Prelude.Hashable Cluster where
  hashWithSalt :: Int -> Cluster -> Int
hashWithSalt Int
_salt Cluster' {Maybe [EncryptionConfig]
Maybe Text
Maybe (HashMap Text Text)
Maybe POSIX
Maybe Certificate
Maybe ClusterHealth
Maybe ClusterStatus
Maybe ConnectorConfigResponse
Maybe KubernetesNetworkConfigResponse
Maybe Logging
Maybe Identity
Maybe OutpostConfigResponse
Maybe VpcConfigResponse
version :: Maybe Text
tags :: Maybe (HashMap Text Text)
status :: Maybe ClusterStatus
roleArn :: Maybe Text
resourcesVpcConfig :: Maybe VpcConfigResponse
platformVersion :: Maybe Text
outpostConfig :: Maybe OutpostConfigResponse
name :: Maybe Text
logging :: Maybe Logging
kubernetesNetworkConfig :: Maybe KubernetesNetworkConfigResponse
identity :: Maybe Identity
id :: Maybe Text
health :: Maybe ClusterHealth
endpoint :: Maybe Text
encryptionConfig :: Maybe [EncryptionConfig]
createdAt :: Maybe POSIX
connectorConfig :: Maybe ConnectorConfigResponse
clientRequestToken :: Maybe Text
certificateAuthority :: Maybe Certificate
arn :: Maybe Text
$sel:version:Cluster' :: Cluster -> Maybe Text
$sel:tags:Cluster' :: Cluster -> Maybe (HashMap Text Text)
$sel:status:Cluster' :: Cluster -> Maybe ClusterStatus
$sel:roleArn:Cluster' :: Cluster -> Maybe Text
$sel:resourcesVpcConfig:Cluster' :: Cluster -> Maybe VpcConfigResponse
$sel:platformVersion:Cluster' :: Cluster -> Maybe Text
$sel:outpostConfig:Cluster' :: Cluster -> Maybe OutpostConfigResponse
$sel:name:Cluster' :: Cluster -> Maybe Text
$sel:logging:Cluster' :: Cluster -> Maybe Logging
$sel:kubernetesNetworkConfig:Cluster' :: Cluster -> Maybe KubernetesNetworkConfigResponse
$sel:identity:Cluster' :: Cluster -> Maybe Identity
$sel:id:Cluster' :: Cluster -> Maybe Text
$sel:health:Cluster' :: Cluster -> Maybe ClusterHealth
$sel:endpoint:Cluster' :: Cluster -> Maybe Text
$sel:encryptionConfig:Cluster' :: Cluster -> Maybe [EncryptionConfig]
$sel:createdAt:Cluster' :: Cluster -> Maybe POSIX
$sel:connectorConfig:Cluster' :: Cluster -> Maybe ConnectorConfigResponse
$sel:clientRequestToken:Cluster' :: Cluster -> Maybe Text
$sel:certificateAuthority:Cluster' :: Cluster -> Maybe Certificate
$sel:arn:Cluster' :: Cluster -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
arn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Certificate
certificateAuthority
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientRequestToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ConnectorConfigResponse
connectorConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
createdAt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [EncryptionConfig]
encryptionConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
endpoint
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ClusterHealth
health
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
id
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Identity
identity
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe KubernetesNetworkConfigResponse
kubernetesNetworkConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Logging
logging
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe OutpostConfigResponse
outpostConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
platformVersion
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VpcConfigResponse
resourcesVpcConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
roleArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ClusterStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
version

instance Prelude.NFData Cluster where
  rnf :: Cluster -> ()
rnf Cluster' {Maybe [EncryptionConfig]
Maybe Text
Maybe (HashMap Text Text)
Maybe POSIX
Maybe Certificate
Maybe ClusterHealth
Maybe ClusterStatus
Maybe ConnectorConfigResponse
Maybe KubernetesNetworkConfigResponse
Maybe Logging
Maybe Identity
Maybe OutpostConfigResponse
Maybe VpcConfigResponse
version :: Maybe Text
tags :: Maybe (HashMap Text Text)
status :: Maybe ClusterStatus
roleArn :: Maybe Text
resourcesVpcConfig :: Maybe VpcConfigResponse
platformVersion :: Maybe Text
outpostConfig :: Maybe OutpostConfigResponse
name :: Maybe Text
logging :: Maybe Logging
kubernetesNetworkConfig :: Maybe KubernetesNetworkConfigResponse
identity :: Maybe Identity
id :: Maybe Text
health :: Maybe ClusterHealth
endpoint :: Maybe Text
encryptionConfig :: Maybe [EncryptionConfig]
createdAt :: Maybe POSIX
connectorConfig :: Maybe ConnectorConfigResponse
clientRequestToken :: Maybe Text
certificateAuthority :: Maybe Certificate
arn :: Maybe Text
$sel:version:Cluster' :: Cluster -> Maybe Text
$sel:tags:Cluster' :: Cluster -> Maybe (HashMap Text Text)
$sel:status:Cluster' :: Cluster -> Maybe ClusterStatus
$sel:roleArn:Cluster' :: Cluster -> Maybe Text
$sel:resourcesVpcConfig:Cluster' :: Cluster -> Maybe VpcConfigResponse
$sel:platformVersion:Cluster' :: Cluster -> Maybe Text
$sel:outpostConfig:Cluster' :: Cluster -> Maybe OutpostConfigResponse
$sel:name:Cluster' :: Cluster -> Maybe Text
$sel:logging:Cluster' :: Cluster -> Maybe Logging
$sel:kubernetesNetworkConfig:Cluster' :: Cluster -> Maybe KubernetesNetworkConfigResponse
$sel:identity:Cluster' :: Cluster -> Maybe Identity
$sel:id:Cluster' :: Cluster -> Maybe Text
$sel:health:Cluster' :: Cluster -> Maybe ClusterHealth
$sel:endpoint:Cluster' :: Cluster -> Maybe Text
$sel:encryptionConfig:Cluster' :: Cluster -> Maybe [EncryptionConfig]
$sel:createdAt:Cluster' :: Cluster -> Maybe POSIX
$sel:connectorConfig:Cluster' :: Cluster -> Maybe ConnectorConfigResponse
$sel:clientRequestToken:Cluster' :: Cluster -> Maybe Text
$sel:certificateAuthority:Cluster' :: Cluster -> Maybe Certificate
$sel:arn:Cluster' :: Cluster -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
arn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Certificate
certificateAuthority
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientRequestToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ConnectorConfigResponse
connectorConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
createdAt
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [EncryptionConfig]
encryptionConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
endpoint
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ClusterHealth
health
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
id
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Identity
identity
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe KubernetesNetworkConfigResponse
kubernetesNetworkConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Logging
logging
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe OutpostConfigResponse
outpostConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
platformVersion
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VpcConfigResponse
resourcesVpcConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
roleArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ClusterStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
version