{-# 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.Redshift.Types.Cluster
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.Redshift.Types.Cluster where

import qualified Amazonka.Core as Core
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude
import Amazonka.Redshift.Internal
import Amazonka.Redshift.Types.AquaConfiguration
import Amazonka.Redshift.Types.ClusterIamRole
import Amazonka.Redshift.Types.ClusterNode
import Amazonka.Redshift.Types.ClusterParameterGroupStatus
import Amazonka.Redshift.Types.ClusterSecurityGroupMembership
import Amazonka.Redshift.Types.ClusterSnapshotCopyStatus
import Amazonka.Redshift.Types.DataTransferProgress
import Amazonka.Redshift.Types.DeferredMaintenanceWindow
import Amazonka.Redshift.Types.ElasticIpStatus
import Amazonka.Redshift.Types.Endpoint
import Amazonka.Redshift.Types.HsmStatus
import Amazonka.Redshift.Types.PendingModifiedValues
import Amazonka.Redshift.Types.ResizeInfo
import Amazonka.Redshift.Types.RestoreStatus
import Amazonka.Redshift.Types.ScheduleState
import Amazonka.Redshift.Types.Tag
import Amazonka.Redshift.Types.VpcSecurityGroupMembership

-- | Describes a cluster.
--
-- /See:/ 'newCluster' smart constructor.
data Cluster = Cluster'
  { -- | The AQUA (Advanced Query Accelerator) configuration of the cluster.
    Cluster -> Maybe AquaConfiguration
aquaConfiguration :: Prelude.Maybe AquaConfiguration,
    -- | Returns the following:
    --
    -- -   AllowCancelResize: a boolean value indicating if the resize
    --     operation can be cancelled.
    --
    -- -   ResizeType: Returns ClassicResize
    Cluster -> Maybe ResizeInfo
resizeInfo :: Prelude.Maybe ResizeInfo,
    -- | A value that describes the status of a cluster restore action. This
    -- parameter returns null if the cluster was not created by restoring a
    -- snapshot.
    Cluster -> Maybe RestoreStatus
restoreStatus :: Prelude.Maybe RestoreStatus,
    -- | The default number of days to retain a manual snapshot. If the value is
    -- -1, the snapshot is retained indefinitely. This setting doesn\'t change
    -- the retention period of existing snapshots.
    --
    -- The value must be either -1 or an integer between 1 and 3,653.
    Cluster -> Maybe Int
manualSnapshotRetentionPeriod :: Prelude.Maybe Prelude.Int,
    -- | An option that specifies whether to create the cluster with enhanced VPC
    -- routing enabled. To create a cluster that uses enhanced VPC routing, the
    -- cluster must be in a VPC. For more information, see
    -- <https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html Enhanced VPC Routing>
    -- in the Amazon Redshift Cluster Management Guide.
    --
    -- If this option is @true@, enhanced VPC routing is enabled.
    --
    -- Default: false
    Cluster -> Maybe Bool
enhancedVpcRouting :: Prelude.Maybe Prelude.Bool,
    -- | A value that returns the destination region and retention period that
    -- are configured for cross-region snapshot copy.
    Cluster -> Maybe ClusterSnapshotCopyStatus
clusterSnapshotCopyStatus :: Prelude.Maybe ClusterSnapshotCopyStatus,
    -- | The availability status of the cluster for queries. Possible values are
    -- the following:
    --
    -- -   Available - The cluster is available for queries.
    --
    -- -   Unavailable - The cluster is not available for queries.
    --
    -- -   Maintenance - The cluster is intermittently available for queries
    --     due to maintenance activities.
    --
    -- -   Modifying - The cluster is intermittently available for queries due
    --     to changes that modify the cluster.
    --
    -- -   Failed - The cluster failed and is not available for queries.
    Cluster -> Maybe Text
clusterAvailabilityStatus :: Prelude.Maybe Prelude.Text,
    -- | The specific revision number of the database in the cluster.
    Cluster -> Maybe Text
clusterRevisionNumber :: Prelude.Maybe Prelude.Text,
    -- | A unique identifier for the cluster snapshot schedule.
    Cluster -> Maybe Text
snapshotScheduleIdentifier :: Prelude.Maybe Prelude.Text,
    -- | A boolean value that, if @true@, indicates that the cluster can be
    -- accessed from a public network.
    Cluster -> Maybe Bool
publiclyAccessible :: Prelude.Maybe Prelude.Bool,
    -- | The admin user name for the cluster. This name is used to connect to the
    -- database that is specified in the __DBName__ parameter.
    Cluster -> Maybe Text
masterUsername :: Prelude.Maybe Prelude.Text,
    -- | The name of the maintenance track for the cluster.
    Cluster -> Maybe Text
maintenanceTrackName :: Prelude.Maybe Prelude.Text,
    -- | The date and time when the next snapshot is expected to be taken for
    -- clusters with a valid snapshot schedule and backups enabled.
    Cluster -> Maybe ISO8601
expectedNextSnapshotScheduleTime :: Prelude.Maybe Core.ISO8601,
    -- | The number of nodes that you can resize the cluster to with the elastic
    -- resize method.
    Cluster -> Maybe Text
elasticResizeNumberOfNodeOptions :: Prelude.Maybe Prelude.Text,
    -- | The identifier of the VPC the cluster is in, if the cluster is in a VPC.
    Cluster -> Maybe Text
vpcId :: Prelude.Maybe Prelude.Text,
    -- | A list of cluster security group that are associated with the cluster.
    -- Each security group is represented by an element that contains
    -- @ClusterSecurityGroup.Name@ and @ClusterSecurityGroup.Status@
    -- subelements.
    --
    -- Cluster security groups are used when the cluster is not created in an
    -- Amazon Virtual Private Cloud (VPC). Clusters that are created in a VPC
    -- use VPC security groups, which are listed by the __VpcSecurityGroups__
    -- parameter.
    Cluster -> Maybe [ClusterSecurityGroupMembership]
clusterSecurityGroups :: Prelude.Maybe [ClusterSecurityGroupMembership],
    -- | The number of days that automatic cluster snapshots are retained.
    Cluster -> Maybe Int
automatedSnapshotRetentionPeriod :: Prelude.Maybe Prelude.Int,
    -- | The current state of the cluster snapshot schedule.
    Cluster -> Maybe ScheduleState
snapshotScheduleState :: Prelude.Maybe ScheduleState,
    Cluster -> Maybe DataTransferProgress
dataTransferProgress :: Prelude.Maybe DataTransferProgress,
    -- | A boolean value that, if @true@, indicates that data in the cluster is
    -- encrypted at rest.
    Cluster -> Maybe Bool
encrypted :: Prelude.Maybe Prelude.Bool,
    -- | The name of the subnet group that is associated with the cluster. This
    -- parameter is valid only when the cluster is in a VPC.
    Cluster -> Maybe Text
clusterSubnetGroupName :: Prelude.Maybe Prelude.Text,
    -- | The status of next expected snapshot for clusters having a valid
    -- snapshot schedule and backups enabled. Possible values are the
    -- following:
    --
    -- -   OnTrack - The next snapshot is expected to be taken on time.
    --
    -- -   Pending - The next snapshot is pending to be taken.
    Cluster -> Maybe Text
expectedNextSnapshotScheduleTimeStatus :: Prelude.Maybe Prelude.Text,
    -- | The unique identifier of the cluster.
    Cluster -> Maybe Text
clusterIdentifier :: Prelude.Maybe Prelude.Text,
    -- | Describes a group of @DeferredMaintenanceWindow@ objects.
    Cluster -> Maybe [DeferredMaintenanceWindow]
deferredMaintenanceWindows :: Prelude.Maybe [DeferredMaintenanceWindow],
    -- | The number of compute nodes in the cluster.
    Cluster -> Maybe Int
numberOfNodes :: Prelude.Maybe Prelude.Int,
    -- | The public key for the cluster.
    Cluster -> Maybe Text
clusterPublicKey :: Prelude.Maybe Prelude.Text,
    -- | The weekly time range, in Universal Coordinated Time (UTC), during which
    -- system maintenance can occur.
    Cluster -> Maybe Text
preferredMaintenanceWindow :: Prelude.Maybe Prelude.Text,
    -- | The status of a modify operation, if any, initiated for the cluster.
    Cluster -> Maybe Text
modifyStatus :: Prelude.Maybe Prelude.Text,
    -- | The namespace Amazon Resource Name (ARN) of the cluster.
    Cluster -> Maybe Text
clusterNamespaceArn :: Prelude.Maybe Prelude.Text,
    -- | The Key Management Service (KMS) key ID of the encryption key used to
    -- encrypt data in the cluster.
    Cluster -> Maybe Text
kmsKeyId :: Prelude.Maybe Prelude.Text,
    -- | The list of cluster parameter groups that are associated with this
    -- cluster. Each parameter group in the list is returned with its status.
    Cluster -> Maybe [ClusterParameterGroupStatus]
clusterParameterGroups :: Prelude.Maybe [ClusterParameterGroupStatus],
    -- | The total storage capacity of the cluster in megabytes.
    Cluster -> Maybe Integer
totalStorageCapacityInMegaBytes :: Prelude.Maybe Prelude.Integer,
    -- | The name of the Availability Zone in which the cluster is located.
    Cluster -> Maybe Text
availabilityZone :: Prelude.Maybe Prelude.Text,
    -- | A list of Amazon Virtual Private Cloud (Amazon VPC) security groups that
    -- are associated with the cluster. This parameter is returned only if the
    -- cluster is in a VPC.
    Cluster -> Maybe [VpcSecurityGroupMembership]
vpcSecurityGroups :: Prelude.Maybe [VpcSecurityGroupMembership],
    -- | A value that reports whether the Amazon Redshift cluster has finished
    -- applying any hardware security module (HSM) settings changes specified
    -- in a modify cluster command.
    --
    -- Values: active, applying
    Cluster -> Maybe HsmStatus
hsmStatus :: Prelude.Maybe HsmStatus,
    -- | A list of Identity and Access Management (IAM) roles that can be used by
    -- the cluster to access other Amazon Web Services services.
    Cluster -> Maybe [ClusterIamRole]
iamRoles :: Prelude.Maybe [ClusterIamRole],
    -- | Cluster operations that are waiting to be started.
    Cluster -> Maybe [Text]
pendingActions :: Prelude.Maybe [Prelude.Text],
    -- | The status of the elastic IP (EIP) address.
    Cluster -> Maybe ElasticIpStatus
elasticIpStatus :: Prelude.Maybe ElasticIpStatus,
    -- | The version ID of the Amazon Redshift engine that is running on the
    -- cluster.
    Cluster -> Maybe Text
clusterVersion :: Prelude.Maybe Prelude.Text,
    -- | The node type for the nodes in the cluster.
    Cluster -> Maybe Text
nodeType :: Prelude.Maybe Prelude.Text,
    -- | The date and time in UTC when system maintenance can begin.
    Cluster -> Maybe ISO8601
nextMaintenanceWindowStartTime :: Prelude.Maybe Core.ISO8601,
    -- | The date and time that the cluster was created.
    Cluster -> Maybe ISO8601
clusterCreateTime :: Prelude.Maybe Core.ISO8601,
    -- | The connection endpoint.
    Cluster -> Maybe Endpoint
endpoint :: Prelude.Maybe Endpoint,
    -- | A boolean value that, if @true@, indicates that major version upgrades
    -- will be applied automatically to the cluster during the maintenance
    -- window.
    Cluster -> Maybe Bool
allowVersionUpgrade :: Prelude.Maybe Prelude.Bool,
    -- | The current state of the cluster. Possible values are the following:
    --
    -- -   @available@
    --
    -- -   @available, prep-for-resize@
    --
    -- -   @available, resize-cleanup@
    --
    -- -   @cancelling-resize@
    --
    -- -   @creating@
    --
    -- -   @deleting@
    --
    -- -   @final-snapshot@
    --
    -- -   @hardware-failure@
    --
    -- -   @incompatible-hsm@
    --
    -- -   @incompatible-network@
    --
    -- -   @incompatible-parameters@
    --
    -- -   @incompatible-restore@
    --
    -- -   @modifying@
    --
    -- -   @paused@
    --
    -- -   @rebooting@
    --
    -- -   @renaming@
    --
    -- -   @resizing@
    --
    -- -   @rotating-keys@
    --
    -- -   @storage-full@
    --
    -- -   @updating-hsm@
    Cluster -> Maybe Text
clusterStatus :: Prelude.Maybe Prelude.Text,
    -- | A value that, if present, indicates that changes to the cluster are
    -- pending. Specific pending changes are identified by subelements.
    Cluster -> Maybe PendingModifiedValues
pendingModifiedValues :: Prelude.Maybe PendingModifiedValues,
    -- | The list of tags for the cluster.
    Cluster -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | Describes the status of the Availability Zone relocation operation.
    Cluster -> Maybe Text
availabilityZoneRelocationStatus :: Prelude.Maybe Prelude.Text,
    -- | The nodes in the cluster.
    Cluster -> Maybe [ClusterNode]
clusterNodes :: Prelude.Maybe [ClusterNode],
    -- | The name of the initial database that was created when the cluster was
    -- created. This same name is returned for the life of the cluster. If an
    -- initial database was not specified, a database named @dev@dev was
    -- created by default.
    Cluster -> Maybe Text
dbName :: Prelude.Maybe Prelude.Text
  }
  deriving (Cluster -> Cluster -> Bool
(Cluster -> Cluster -> Bool)
-> (Cluster -> Cluster -> Bool) -> Eq Cluster
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]
(Int -> ReadS Cluster)
-> ReadS [Cluster]
-> ReadPrec Cluster
-> ReadPrec [Cluster]
-> Read 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
(Int -> Cluster -> ShowS)
-> (Cluster -> String) -> ([Cluster] -> ShowS) -> Show Cluster
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. Cluster -> Rep Cluster x)
-> (forall x. Rep Cluster x -> Cluster) -> Generic Cluster
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:
--
-- 'aquaConfiguration', 'cluster_aquaConfiguration' - The AQUA (Advanced Query Accelerator) configuration of the cluster.
--
-- 'resizeInfo', 'cluster_resizeInfo' - Returns the following:
--
-- -   AllowCancelResize: a boolean value indicating if the resize
--     operation can be cancelled.
--
-- -   ResizeType: Returns ClassicResize
--
-- 'restoreStatus', 'cluster_restoreStatus' - A value that describes the status of a cluster restore action. This
-- parameter returns null if the cluster was not created by restoring a
-- snapshot.
--
-- 'manualSnapshotRetentionPeriod', 'cluster_manualSnapshotRetentionPeriod' - The default number of days to retain a manual snapshot. If the value is
-- -1, the snapshot is retained indefinitely. This setting doesn\'t change
-- the retention period of existing snapshots.
--
-- The value must be either -1 or an integer between 1 and 3,653.
--
-- 'enhancedVpcRouting', 'cluster_enhancedVpcRouting' - An option that specifies whether to create the cluster with enhanced VPC
-- routing enabled. To create a cluster that uses enhanced VPC routing, the
-- cluster must be in a VPC. For more information, see
-- <https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html Enhanced VPC Routing>
-- in the Amazon Redshift Cluster Management Guide.
--
-- If this option is @true@, enhanced VPC routing is enabled.
--
-- Default: false
--
-- 'clusterSnapshotCopyStatus', 'cluster_clusterSnapshotCopyStatus' - A value that returns the destination region and retention period that
-- are configured for cross-region snapshot copy.
--
-- 'clusterAvailabilityStatus', 'cluster_clusterAvailabilityStatus' - The availability status of the cluster for queries. Possible values are
-- the following:
--
-- -   Available - The cluster is available for queries.
--
-- -   Unavailable - The cluster is not available for queries.
--
-- -   Maintenance - The cluster is intermittently available for queries
--     due to maintenance activities.
--
-- -   Modifying - The cluster is intermittently available for queries due
--     to changes that modify the cluster.
--
-- -   Failed - The cluster failed and is not available for queries.
--
-- 'clusterRevisionNumber', 'cluster_clusterRevisionNumber' - The specific revision number of the database in the cluster.
--
-- 'snapshotScheduleIdentifier', 'cluster_snapshotScheduleIdentifier' - A unique identifier for the cluster snapshot schedule.
--
-- 'publiclyAccessible', 'cluster_publiclyAccessible' - A boolean value that, if @true@, indicates that the cluster can be
-- accessed from a public network.
--
-- 'masterUsername', 'cluster_masterUsername' - The admin user name for the cluster. This name is used to connect to the
-- database that is specified in the __DBName__ parameter.
--
-- 'maintenanceTrackName', 'cluster_maintenanceTrackName' - The name of the maintenance track for the cluster.
--
-- 'expectedNextSnapshotScheduleTime', 'cluster_expectedNextSnapshotScheduleTime' - The date and time when the next snapshot is expected to be taken for
-- clusters with a valid snapshot schedule and backups enabled.
--
-- 'elasticResizeNumberOfNodeOptions', 'cluster_elasticResizeNumberOfNodeOptions' - The number of nodes that you can resize the cluster to with the elastic
-- resize method.
--
-- 'vpcId', 'cluster_vpcId' - The identifier of the VPC the cluster is in, if the cluster is in a VPC.
--
-- 'clusterSecurityGroups', 'cluster_clusterSecurityGroups' - A list of cluster security group that are associated with the cluster.
-- Each security group is represented by an element that contains
-- @ClusterSecurityGroup.Name@ and @ClusterSecurityGroup.Status@
-- subelements.
--
-- Cluster security groups are used when the cluster is not created in an
-- Amazon Virtual Private Cloud (VPC). Clusters that are created in a VPC
-- use VPC security groups, which are listed by the __VpcSecurityGroups__
-- parameter.
--
-- 'automatedSnapshotRetentionPeriod', 'cluster_automatedSnapshotRetentionPeriod' - The number of days that automatic cluster snapshots are retained.
--
-- 'snapshotScheduleState', 'cluster_snapshotScheduleState' - The current state of the cluster snapshot schedule.
--
-- 'dataTransferProgress', 'cluster_dataTransferProgress' -
--
-- 'encrypted', 'cluster_encrypted' - A boolean value that, if @true@, indicates that data in the cluster is
-- encrypted at rest.
--
-- 'clusterSubnetGroupName', 'cluster_clusterSubnetGroupName' - The name of the subnet group that is associated with the cluster. This
-- parameter is valid only when the cluster is in a VPC.
--
-- 'expectedNextSnapshotScheduleTimeStatus', 'cluster_expectedNextSnapshotScheduleTimeStatus' - The status of next expected snapshot for clusters having a valid
-- snapshot schedule and backups enabled. Possible values are the
-- following:
--
-- -   OnTrack - The next snapshot is expected to be taken on time.
--
-- -   Pending - The next snapshot is pending to be taken.
--
-- 'clusterIdentifier', 'cluster_clusterIdentifier' - The unique identifier of the cluster.
--
-- 'deferredMaintenanceWindows', 'cluster_deferredMaintenanceWindows' - Describes a group of @DeferredMaintenanceWindow@ objects.
--
-- 'numberOfNodes', 'cluster_numberOfNodes' - The number of compute nodes in the cluster.
--
-- 'clusterPublicKey', 'cluster_clusterPublicKey' - The public key for the cluster.
--
-- 'preferredMaintenanceWindow', 'cluster_preferredMaintenanceWindow' - The weekly time range, in Universal Coordinated Time (UTC), during which
-- system maintenance can occur.
--
-- 'modifyStatus', 'cluster_modifyStatus' - The status of a modify operation, if any, initiated for the cluster.
--
-- 'clusterNamespaceArn', 'cluster_clusterNamespaceArn' - The namespace Amazon Resource Name (ARN) of the cluster.
--
-- 'kmsKeyId', 'cluster_kmsKeyId' - The Key Management Service (KMS) key ID of the encryption key used to
-- encrypt data in the cluster.
--
-- 'clusterParameterGroups', 'cluster_clusterParameterGroups' - The list of cluster parameter groups that are associated with this
-- cluster. Each parameter group in the list is returned with its status.
--
-- 'totalStorageCapacityInMegaBytes', 'cluster_totalStorageCapacityInMegaBytes' - The total storage capacity of the cluster in megabytes.
--
-- 'availabilityZone', 'cluster_availabilityZone' - The name of the Availability Zone in which the cluster is located.
--
-- 'vpcSecurityGroups', 'cluster_vpcSecurityGroups' - A list of Amazon Virtual Private Cloud (Amazon VPC) security groups that
-- are associated with the cluster. This parameter is returned only if the
-- cluster is in a VPC.
--
-- 'hsmStatus', 'cluster_hsmStatus' - A value that reports whether the Amazon Redshift cluster has finished
-- applying any hardware security module (HSM) settings changes specified
-- in a modify cluster command.
--
-- Values: active, applying
--
-- 'iamRoles', 'cluster_iamRoles' - A list of Identity and Access Management (IAM) roles that can be used by
-- the cluster to access other Amazon Web Services services.
--
-- 'pendingActions', 'cluster_pendingActions' - Cluster operations that are waiting to be started.
--
-- 'elasticIpStatus', 'cluster_elasticIpStatus' - The status of the elastic IP (EIP) address.
--
-- 'clusterVersion', 'cluster_clusterVersion' - The version ID of the Amazon Redshift engine that is running on the
-- cluster.
--
-- 'nodeType', 'cluster_nodeType' - The node type for the nodes in the cluster.
--
-- 'nextMaintenanceWindowStartTime', 'cluster_nextMaintenanceWindowStartTime' - The date and time in UTC when system maintenance can begin.
--
-- 'clusterCreateTime', 'cluster_clusterCreateTime' - The date and time that the cluster was created.
--
-- 'endpoint', 'cluster_endpoint' - The connection endpoint.
--
-- 'allowVersionUpgrade', 'cluster_allowVersionUpgrade' - A boolean value that, if @true@, indicates that major version upgrades
-- will be applied automatically to the cluster during the maintenance
-- window.
--
-- 'clusterStatus', 'cluster_clusterStatus' - The current state of the cluster. Possible values are the following:
--
-- -   @available@
--
-- -   @available, prep-for-resize@
--
-- -   @available, resize-cleanup@
--
-- -   @cancelling-resize@
--
-- -   @creating@
--
-- -   @deleting@
--
-- -   @final-snapshot@
--
-- -   @hardware-failure@
--
-- -   @incompatible-hsm@
--
-- -   @incompatible-network@
--
-- -   @incompatible-parameters@
--
-- -   @incompatible-restore@
--
-- -   @modifying@
--
-- -   @paused@
--
-- -   @rebooting@
--
-- -   @renaming@
--
-- -   @resizing@
--
-- -   @rotating-keys@
--
-- -   @storage-full@
--
-- -   @updating-hsm@
--
-- 'pendingModifiedValues', 'cluster_pendingModifiedValues' - A value that, if present, indicates that changes to the cluster are
-- pending. Specific pending changes are identified by subelements.
--
-- 'tags', 'cluster_tags' - The list of tags for the cluster.
--
-- 'availabilityZoneRelocationStatus', 'cluster_availabilityZoneRelocationStatus' - Describes the status of the Availability Zone relocation operation.
--
-- 'clusterNodes', 'cluster_clusterNodes' - The nodes in the cluster.
--
-- 'dbName', 'cluster_dbName' - The name of the initial database that was created when the cluster was
-- created. This same name is returned for the life of the cluster. If an
-- initial database was not specified, a database named @dev@dev was
-- created by default.
newCluster ::
  Cluster
newCluster :: Cluster
newCluster =
  Cluster' :: Maybe AquaConfiguration
-> Maybe ResizeInfo
-> Maybe RestoreStatus
-> Maybe Int
-> Maybe Bool
-> Maybe ClusterSnapshotCopyStatus
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Bool
-> Maybe Text
-> Maybe Text
-> Maybe ISO8601
-> Maybe Text
-> Maybe Text
-> Maybe [ClusterSecurityGroupMembership]
-> Maybe Int
-> Maybe ScheduleState
-> Maybe DataTransferProgress
-> Maybe Bool
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe [DeferredMaintenanceWindow]
-> Maybe Int
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe [ClusterParameterGroupStatus]
-> Maybe Integer
-> Maybe Text
-> Maybe [VpcSecurityGroupMembership]
-> Maybe HsmStatus
-> Maybe [ClusterIamRole]
-> Maybe [Text]
-> Maybe ElasticIpStatus
-> Maybe Text
-> Maybe Text
-> Maybe ISO8601
-> Maybe ISO8601
-> Maybe Endpoint
-> Maybe Bool
-> Maybe Text
-> Maybe PendingModifiedValues
-> Maybe [Tag]
-> Maybe Text
-> Maybe [ClusterNode]
-> Maybe Text
-> Cluster
Cluster'
    { $sel:aquaConfiguration:Cluster' :: Maybe AquaConfiguration
aquaConfiguration = Maybe AquaConfiguration
forall a. Maybe a
Prelude.Nothing,
      $sel:resizeInfo:Cluster' :: Maybe ResizeInfo
resizeInfo = Maybe ResizeInfo
forall a. Maybe a
Prelude.Nothing,
      $sel:restoreStatus:Cluster' :: Maybe RestoreStatus
restoreStatus = Maybe RestoreStatus
forall a. Maybe a
Prelude.Nothing,
      $sel:manualSnapshotRetentionPeriod:Cluster' :: Maybe Int
manualSnapshotRetentionPeriod = Maybe Int
forall a. Maybe a
Prelude.Nothing,
      $sel:enhancedVpcRouting:Cluster' :: Maybe Bool
enhancedVpcRouting = Maybe Bool
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterSnapshotCopyStatus:Cluster' :: Maybe ClusterSnapshotCopyStatus
clusterSnapshotCopyStatus = Maybe ClusterSnapshotCopyStatus
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterAvailabilityStatus:Cluster' :: Maybe Text
clusterAvailabilityStatus = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterRevisionNumber:Cluster' :: Maybe Text
clusterRevisionNumber = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:snapshotScheduleIdentifier:Cluster' :: Maybe Text
snapshotScheduleIdentifier = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:publiclyAccessible:Cluster' :: Maybe Bool
publiclyAccessible = Maybe Bool
forall a. Maybe a
Prelude.Nothing,
      $sel:masterUsername:Cluster' :: Maybe Text
masterUsername = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:maintenanceTrackName:Cluster' :: Maybe Text
maintenanceTrackName = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:expectedNextSnapshotScheduleTime:Cluster' :: Maybe ISO8601
expectedNextSnapshotScheduleTime = Maybe ISO8601
forall a. Maybe a
Prelude.Nothing,
      $sel:elasticResizeNumberOfNodeOptions:Cluster' :: Maybe Text
elasticResizeNumberOfNodeOptions = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:vpcId:Cluster' :: Maybe Text
vpcId = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterSecurityGroups:Cluster' :: Maybe [ClusterSecurityGroupMembership]
clusterSecurityGroups = Maybe [ClusterSecurityGroupMembership]
forall a. Maybe a
Prelude.Nothing,
      $sel:automatedSnapshotRetentionPeriod:Cluster' :: Maybe Int
automatedSnapshotRetentionPeriod = Maybe Int
forall a. Maybe a
Prelude.Nothing,
      $sel:snapshotScheduleState:Cluster' :: Maybe ScheduleState
snapshotScheduleState = Maybe ScheduleState
forall a. Maybe a
Prelude.Nothing,
      $sel:dataTransferProgress:Cluster' :: Maybe DataTransferProgress
dataTransferProgress = Maybe DataTransferProgress
forall a. Maybe a
Prelude.Nothing,
      $sel:encrypted:Cluster' :: Maybe Bool
encrypted = Maybe Bool
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterSubnetGroupName:Cluster' :: Maybe Text
clusterSubnetGroupName = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:expectedNextSnapshotScheduleTimeStatus:Cluster' :: Maybe Text
expectedNextSnapshotScheduleTimeStatus =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterIdentifier:Cluster' :: Maybe Text
clusterIdentifier = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:deferredMaintenanceWindows:Cluster' :: Maybe [DeferredMaintenanceWindow]
deferredMaintenanceWindows = Maybe [DeferredMaintenanceWindow]
forall a. Maybe a
Prelude.Nothing,
      $sel:numberOfNodes:Cluster' :: Maybe Int
numberOfNodes = Maybe Int
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterPublicKey:Cluster' :: Maybe Text
clusterPublicKey = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:preferredMaintenanceWindow:Cluster' :: Maybe Text
preferredMaintenanceWindow = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:modifyStatus:Cluster' :: Maybe Text
modifyStatus = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterNamespaceArn:Cluster' :: Maybe Text
clusterNamespaceArn = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:kmsKeyId:Cluster' :: Maybe Text
kmsKeyId = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterParameterGroups:Cluster' :: Maybe [ClusterParameterGroupStatus]
clusterParameterGroups = Maybe [ClusterParameterGroupStatus]
forall a. Maybe a
Prelude.Nothing,
      $sel:totalStorageCapacityInMegaBytes:Cluster' :: Maybe Integer
totalStorageCapacityInMegaBytes = Maybe Integer
forall a. Maybe a
Prelude.Nothing,
      $sel:availabilityZone:Cluster' :: Maybe Text
availabilityZone = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:vpcSecurityGroups:Cluster' :: Maybe [VpcSecurityGroupMembership]
vpcSecurityGroups = Maybe [VpcSecurityGroupMembership]
forall a. Maybe a
Prelude.Nothing,
      $sel:hsmStatus:Cluster' :: Maybe HsmStatus
hsmStatus = Maybe HsmStatus
forall a. Maybe a
Prelude.Nothing,
      $sel:iamRoles:Cluster' :: Maybe [ClusterIamRole]
iamRoles = Maybe [ClusterIamRole]
forall a. Maybe a
Prelude.Nothing,
      $sel:pendingActions:Cluster' :: Maybe [Text]
pendingActions = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:elasticIpStatus:Cluster' :: Maybe ElasticIpStatus
elasticIpStatus = Maybe ElasticIpStatus
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterVersion:Cluster' :: Maybe Text
clusterVersion = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:nodeType:Cluster' :: Maybe Text
nodeType = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:nextMaintenanceWindowStartTime:Cluster' :: Maybe ISO8601
nextMaintenanceWindowStartTime = Maybe ISO8601
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterCreateTime:Cluster' :: Maybe ISO8601
clusterCreateTime = Maybe ISO8601
forall a. Maybe a
Prelude.Nothing,
      $sel:endpoint:Cluster' :: Maybe Endpoint
endpoint = Maybe Endpoint
forall a. Maybe a
Prelude.Nothing,
      $sel:allowVersionUpgrade:Cluster' :: Maybe Bool
allowVersionUpgrade = Maybe Bool
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterStatus:Cluster' :: Maybe Text
clusterStatus = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:pendingModifiedValues:Cluster' :: Maybe PendingModifiedValues
pendingModifiedValues = Maybe PendingModifiedValues
forall a. Maybe a
Prelude.Nothing,
      $sel:tags:Cluster' :: Maybe [Tag]
tags = Maybe [Tag]
forall a. Maybe a
Prelude.Nothing,
      $sel:availabilityZoneRelocationStatus:Cluster' :: Maybe Text
availabilityZoneRelocationStatus = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterNodes:Cluster' :: Maybe [ClusterNode]
clusterNodes = Maybe [ClusterNode]
forall a. Maybe a
Prelude.Nothing,
      $sel:dbName:Cluster' :: Maybe Text
dbName = Maybe Text
forall a. Maybe a
Prelude.Nothing
    }

-- | The AQUA (Advanced Query Accelerator) configuration of the cluster.
cluster_aquaConfiguration :: Lens.Lens' Cluster (Prelude.Maybe AquaConfiguration)
cluster_aquaConfiguration :: (Maybe AquaConfiguration -> f (Maybe AquaConfiguration))
-> Cluster -> f Cluster
cluster_aquaConfiguration = (Cluster -> Maybe AquaConfiguration)
-> (Cluster -> Maybe AquaConfiguration -> Cluster)
-> Lens
     Cluster Cluster (Maybe AquaConfiguration) (Maybe AquaConfiguration)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe AquaConfiguration
aquaConfiguration :: Maybe AquaConfiguration
$sel:aquaConfiguration:Cluster' :: Cluster -> Maybe AquaConfiguration
aquaConfiguration} -> Maybe AquaConfiguration
aquaConfiguration) (\s :: Cluster
s@Cluster' {} Maybe AquaConfiguration
a -> Cluster
s {$sel:aquaConfiguration:Cluster' :: Maybe AquaConfiguration
aquaConfiguration = Maybe AquaConfiguration
a} :: Cluster)

-- | Returns the following:
--
-- -   AllowCancelResize: a boolean value indicating if the resize
--     operation can be cancelled.
--
-- -   ResizeType: Returns ClassicResize
cluster_resizeInfo :: Lens.Lens' Cluster (Prelude.Maybe ResizeInfo)
cluster_resizeInfo :: (Maybe ResizeInfo -> f (Maybe ResizeInfo)) -> Cluster -> f Cluster
cluster_resizeInfo = (Cluster -> Maybe ResizeInfo)
-> (Cluster -> Maybe ResizeInfo -> Cluster)
-> Lens Cluster Cluster (Maybe ResizeInfo) (Maybe ResizeInfo)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe ResizeInfo
resizeInfo :: Maybe ResizeInfo
$sel:resizeInfo:Cluster' :: Cluster -> Maybe ResizeInfo
resizeInfo} -> Maybe ResizeInfo
resizeInfo) (\s :: Cluster
s@Cluster' {} Maybe ResizeInfo
a -> Cluster
s {$sel:resizeInfo:Cluster' :: Maybe ResizeInfo
resizeInfo = Maybe ResizeInfo
a} :: Cluster)

-- | A value that describes the status of a cluster restore action. This
-- parameter returns null if the cluster was not created by restoring a
-- snapshot.
cluster_restoreStatus :: Lens.Lens' Cluster (Prelude.Maybe RestoreStatus)
cluster_restoreStatus :: (Maybe RestoreStatus -> f (Maybe RestoreStatus))
-> Cluster -> f Cluster
cluster_restoreStatus = (Cluster -> Maybe RestoreStatus)
-> (Cluster -> Maybe RestoreStatus -> Cluster)
-> Lens Cluster Cluster (Maybe RestoreStatus) (Maybe RestoreStatus)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe RestoreStatus
restoreStatus :: Maybe RestoreStatus
$sel:restoreStatus:Cluster' :: Cluster -> Maybe RestoreStatus
restoreStatus} -> Maybe RestoreStatus
restoreStatus) (\s :: Cluster
s@Cluster' {} Maybe RestoreStatus
a -> Cluster
s {$sel:restoreStatus:Cluster' :: Maybe RestoreStatus
restoreStatus = Maybe RestoreStatus
a} :: Cluster)

-- | The default number of days to retain a manual snapshot. If the value is
-- -1, the snapshot is retained indefinitely. This setting doesn\'t change
-- the retention period of existing snapshots.
--
-- The value must be either -1 or an integer between 1 and 3,653.
cluster_manualSnapshotRetentionPeriod :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Int)
cluster_manualSnapshotRetentionPeriod :: (Maybe Int -> f (Maybe Int)) -> Cluster -> f Cluster
cluster_manualSnapshotRetentionPeriod = (Cluster -> Maybe Int)
-> (Cluster -> Maybe Int -> Cluster)
-> Lens Cluster Cluster (Maybe Int) (Maybe Int)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Int
manualSnapshotRetentionPeriod :: Maybe Int
$sel:manualSnapshotRetentionPeriod:Cluster' :: Cluster -> Maybe Int
manualSnapshotRetentionPeriod} -> Maybe Int
manualSnapshotRetentionPeriod) (\s :: Cluster
s@Cluster' {} Maybe Int
a -> Cluster
s {$sel:manualSnapshotRetentionPeriod:Cluster' :: Maybe Int
manualSnapshotRetentionPeriod = Maybe Int
a} :: Cluster)

-- | An option that specifies whether to create the cluster with enhanced VPC
-- routing enabled. To create a cluster that uses enhanced VPC routing, the
-- cluster must be in a VPC. For more information, see
-- <https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html Enhanced VPC Routing>
-- in the Amazon Redshift Cluster Management Guide.
--
-- If this option is @true@, enhanced VPC routing is enabled.
--
-- Default: false
cluster_enhancedVpcRouting :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Bool)
cluster_enhancedVpcRouting :: (Maybe Bool -> f (Maybe Bool)) -> Cluster -> f Cluster
cluster_enhancedVpcRouting = (Cluster -> Maybe Bool)
-> (Cluster -> Maybe Bool -> Cluster)
-> Lens Cluster Cluster (Maybe Bool) (Maybe Bool)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Bool
enhancedVpcRouting :: Maybe Bool
$sel:enhancedVpcRouting:Cluster' :: Cluster -> Maybe Bool
enhancedVpcRouting} -> Maybe Bool
enhancedVpcRouting) (\s :: Cluster
s@Cluster' {} Maybe Bool
a -> Cluster
s {$sel:enhancedVpcRouting:Cluster' :: Maybe Bool
enhancedVpcRouting = Maybe Bool
a} :: Cluster)

-- | A value that returns the destination region and retention period that
-- are configured for cross-region snapshot copy.
cluster_clusterSnapshotCopyStatus :: Lens.Lens' Cluster (Prelude.Maybe ClusterSnapshotCopyStatus)
cluster_clusterSnapshotCopyStatus :: (Maybe ClusterSnapshotCopyStatus
 -> f (Maybe ClusterSnapshotCopyStatus))
-> Cluster -> f Cluster
cluster_clusterSnapshotCopyStatus = (Cluster -> Maybe ClusterSnapshotCopyStatus)
-> (Cluster -> Maybe ClusterSnapshotCopyStatus -> Cluster)
-> Lens
     Cluster
     Cluster
     (Maybe ClusterSnapshotCopyStatus)
     (Maybe ClusterSnapshotCopyStatus)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe ClusterSnapshotCopyStatus
clusterSnapshotCopyStatus :: Maybe ClusterSnapshotCopyStatus
$sel:clusterSnapshotCopyStatus:Cluster' :: Cluster -> Maybe ClusterSnapshotCopyStatus
clusterSnapshotCopyStatus} -> Maybe ClusterSnapshotCopyStatus
clusterSnapshotCopyStatus) (\s :: Cluster
s@Cluster' {} Maybe ClusterSnapshotCopyStatus
a -> Cluster
s {$sel:clusterSnapshotCopyStatus:Cluster' :: Maybe ClusterSnapshotCopyStatus
clusterSnapshotCopyStatus = Maybe ClusterSnapshotCopyStatus
a} :: Cluster)

-- | The availability status of the cluster for queries. Possible values are
-- the following:
--
-- -   Available - The cluster is available for queries.
--
-- -   Unavailable - The cluster is not available for queries.
--
-- -   Maintenance - The cluster is intermittently available for queries
--     due to maintenance activities.
--
-- -   Modifying - The cluster is intermittently available for queries due
--     to changes that modify the cluster.
--
-- -   Failed - The cluster failed and is not available for queries.
cluster_clusterAvailabilityStatus :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_clusterAvailabilityStatus :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_clusterAvailabilityStatus = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
clusterAvailabilityStatus :: Maybe Text
$sel:clusterAvailabilityStatus:Cluster' :: Cluster -> Maybe Text
clusterAvailabilityStatus} -> Maybe Text
clusterAvailabilityStatus) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:clusterAvailabilityStatus:Cluster' :: Maybe Text
clusterAvailabilityStatus = Maybe Text
a} :: Cluster)

-- | The specific revision number of the database in the cluster.
cluster_clusterRevisionNumber :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_clusterRevisionNumber :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_clusterRevisionNumber = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
clusterRevisionNumber :: Maybe Text
$sel:clusterRevisionNumber:Cluster' :: Cluster -> Maybe Text
clusterRevisionNumber} -> Maybe Text
clusterRevisionNumber) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:clusterRevisionNumber:Cluster' :: Maybe Text
clusterRevisionNumber = Maybe Text
a} :: Cluster)

-- | A unique identifier for the cluster snapshot schedule.
cluster_snapshotScheduleIdentifier :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_snapshotScheduleIdentifier :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_snapshotScheduleIdentifier = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
snapshotScheduleIdentifier :: Maybe Text
$sel:snapshotScheduleIdentifier:Cluster' :: Cluster -> Maybe Text
snapshotScheduleIdentifier} -> Maybe Text
snapshotScheduleIdentifier) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:snapshotScheduleIdentifier:Cluster' :: Maybe Text
snapshotScheduleIdentifier = Maybe Text
a} :: Cluster)

-- | A boolean value that, if @true@, indicates that the cluster can be
-- accessed from a public network.
cluster_publiclyAccessible :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Bool)
cluster_publiclyAccessible :: (Maybe Bool -> f (Maybe Bool)) -> Cluster -> f Cluster
cluster_publiclyAccessible = (Cluster -> Maybe Bool)
-> (Cluster -> Maybe Bool -> Cluster)
-> Lens Cluster Cluster (Maybe Bool) (Maybe Bool)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Bool
publiclyAccessible :: Maybe Bool
$sel:publiclyAccessible:Cluster' :: Cluster -> Maybe Bool
publiclyAccessible} -> Maybe Bool
publiclyAccessible) (\s :: Cluster
s@Cluster' {} Maybe Bool
a -> Cluster
s {$sel:publiclyAccessible:Cluster' :: Maybe Bool
publiclyAccessible = Maybe Bool
a} :: Cluster)

-- | The admin user name for the cluster. This name is used to connect to the
-- database that is specified in the __DBName__ parameter.
cluster_masterUsername :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_masterUsername :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_masterUsername = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
masterUsername :: Maybe Text
$sel:masterUsername:Cluster' :: Cluster -> Maybe Text
masterUsername} -> Maybe Text
masterUsername) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:masterUsername:Cluster' :: Maybe Text
masterUsername = Maybe Text
a} :: Cluster)

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

-- | The date and time when the next snapshot is expected to be taken for
-- clusters with a valid snapshot schedule and backups enabled.
cluster_expectedNextSnapshotScheduleTime :: Lens.Lens' Cluster (Prelude.Maybe Prelude.UTCTime)
cluster_expectedNextSnapshotScheduleTime :: (Maybe UTCTime -> f (Maybe UTCTime)) -> Cluster -> f Cluster
cluster_expectedNextSnapshotScheduleTime = (Cluster -> Maybe ISO8601)
-> (Cluster -> Maybe ISO8601 -> Cluster)
-> Lens Cluster Cluster (Maybe ISO8601) (Maybe ISO8601)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe ISO8601
expectedNextSnapshotScheduleTime :: Maybe ISO8601
$sel:expectedNextSnapshotScheduleTime:Cluster' :: Cluster -> Maybe ISO8601
expectedNextSnapshotScheduleTime} -> Maybe ISO8601
expectedNextSnapshotScheduleTime) (\s :: Cluster
s@Cluster' {} Maybe ISO8601
a -> Cluster
s {$sel:expectedNextSnapshotScheduleTime:Cluster' :: Maybe ISO8601
expectedNextSnapshotScheduleTime = Maybe ISO8601
a} :: Cluster) ((Maybe ISO8601 -> f (Maybe ISO8601)) -> Cluster -> f Cluster)
-> ((Maybe UTCTime -> f (Maybe UTCTime))
    -> Maybe ISO8601 -> f (Maybe ISO8601))
-> (Maybe UTCTime -> f (Maybe UTCTime))
-> Cluster
-> f Cluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso ISO8601 ISO8601 UTCTime UTCTime
-> Iso
     (Maybe ISO8601) (Maybe ISO8601) (Maybe UTCTime) (Maybe UTCTime)
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 AnIso ISO8601 ISO8601 UTCTime UTCTime
forall (a :: Format). Iso' (Time a) UTCTime
Core._Time

-- | The number of nodes that you can resize the cluster to with the elastic
-- resize method.
cluster_elasticResizeNumberOfNodeOptions :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_elasticResizeNumberOfNodeOptions :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_elasticResizeNumberOfNodeOptions = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
elasticResizeNumberOfNodeOptions :: Maybe Text
$sel:elasticResizeNumberOfNodeOptions:Cluster' :: Cluster -> Maybe Text
elasticResizeNumberOfNodeOptions} -> Maybe Text
elasticResizeNumberOfNodeOptions) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:elasticResizeNumberOfNodeOptions:Cluster' :: Maybe Text
elasticResizeNumberOfNodeOptions = Maybe Text
a} :: Cluster)

-- | The identifier of the VPC the cluster is in, if the cluster is in a VPC.
cluster_vpcId :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_vpcId :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_vpcId = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
vpcId :: Maybe Text
$sel:vpcId:Cluster' :: Cluster -> Maybe Text
vpcId} -> Maybe Text
vpcId) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:vpcId:Cluster' :: Maybe Text
vpcId = Maybe Text
a} :: Cluster)

-- | A list of cluster security group that are associated with the cluster.
-- Each security group is represented by an element that contains
-- @ClusterSecurityGroup.Name@ and @ClusterSecurityGroup.Status@
-- subelements.
--
-- Cluster security groups are used when the cluster is not created in an
-- Amazon Virtual Private Cloud (VPC). Clusters that are created in a VPC
-- use VPC security groups, which are listed by the __VpcSecurityGroups__
-- parameter.
cluster_clusterSecurityGroups :: Lens.Lens' Cluster (Prelude.Maybe [ClusterSecurityGroupMembership])
cluster_clusterSecurityGroups :: (Maybe [ClusterSecurityGroupMembership]
 -> f (Maybe [ClusterSecurityGroupMembership]))
-> Cluster -> f Cluster
cluster_clusterSecurityGroups = (Cluster -> Maybe [ClusterSecurityGroupMembership])
-> (Cluster -> Maybe [ClusterSecurityGroupMembership] -> Cluster)
-> Lens
     Cluster
     Cluster
     (Maybe [ClusterSecurityGroupMembership])
     (Maybe [ClusterSecurityGroupMembership])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe [ClusterSecurityGroupMembership]
clusterSecurityGroups :: Maybe [ClusterSecurityGroupMembership]
$sel:clusterSecurityGroups:Cluster' :: Cluster -> Maybe [ClusterSecurityGroupMembership]
clusterSecurityGroups} -> Maybe [ClusterSecurityGroupMembership]
clusterSecurityGroups) (\s :: Cluster
s@Cluster' {} Maybe [ClusterSecurityGroupMembership]
a -> Cluster
s {$sel:clusterSecurityGroups:Cluster' :: Maybe [ClusterSecurityGroupMembership]
clusterSecurityGroups = Maybe [ClusterSecurityGroupMembership]
a} :: Cluster) ((Maybe [ClusterSecurityGroupMembership]
  -> f (Maybe [ClusterSecurityGroupMembership]))
 -> Cluster -> f Cluster)
-> ((Maybe [ClusterSecurityGroupMembership]
     -> f (Maybe [ClusterSecurityGroupMembership]))
    -> Maybe [ClusterSecurityGroupMembership]
    -> f (Maybe [ClusterSecurityGroupMembership]))
-> (Maybe [ClusterSecurityGroupMembership]
    -> f (Maybe [ClusterSecurityGroupMembership]))
-> Cluster
-> f Cluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [ClusterSecurityGroupMembership]
  [ClusterSecurityGroupMembership]
  [ClusterSecurityGroupMembership]
  [ClusterSecurityGroupMembership]
-> Iso
     (Maybe [ClusterSecurityGroupMembership])
     (Maybe [ClusterSecurityGroupMembership])
     (Maybe [ClusterSecurityGroupMembership])
     (Maybe [ClusterSecurityGroupMembership])
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 AnIso
  [ClusterSecurityGroupMembership]
  [ClusterSecurityGroupMembership]
  [ClusterSecurityGroupMembership]
  [ClusterSecurityGroupMembership]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The number of days that automatic cluster snapshots are retained.
cluster_automatedSnapshotRetentionPeriod :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Int)
cluster_automatedSnapshotRetentionPeriod :: (Maybe Int -> f (Maybe Int)) -> Cluster -> f Cluster
cluster_automatedSnapshotRetentionPeriod = (Cluster -> Maybe Int)
-> (Cluster -> Maybe Int -> Cluster)
-> Lens Cluster Cluster (Maybe Int) (Maybe Int)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Int
automatedSnapshotRetentionPeriod :: Maybe Int
$sel:automatedSnapshotRetentionPeriod:Cluster' :: Cluster -> Maybe Int
automatedSnapshotRetentionPeriod} -> Maybe Int
automatedSnapshotRetentionPeriod) (\s :: Cluster
s@Cluster' {} Maybe Int
a -> Cluster
s {$sel:automatedSnapshotRetentionPeriod:Cluster' :: Maybe Int
automatedSnapshotRetentionPeriod = Maybe Int
a} :: Cluster)

-- | The current state of the cluster snapshot schedule.
cluster_snapshotScheduleState :: Lens.Lens' Cluster (Prelude.Maybe ScheduleState)
cluster_snapshotScheduleState :: (Maybe ScheduleState -> f (Maybe ScheduleState))
-> Cluster -> f Cluster
cluster_snapshotScheduleState = (Cluster -> Maybe ScheduleState)
-> (Cluster -> Maybe ScheduleState -> Cluster)
-> Lens Cluster Cluster (Maybe ScheduleState) (Maybe ScheduleState)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe ScheduleState
snapshotScheduleState :: Maybe ScheduleState
$sel:snapshotScheduleState:Cluster' :: Cluster -> Maybe ScheduleState
snapshotScheduleState} -> Maybe ScheduleState
snapshotScheduleState) (\s :: Cluster
s@Cluster' {} Maybe ScheduleState
a -> Cluster
s {$sel:snapshotScheduleState:Cluster' :: Maybe ScheduleState
snapshotScheduleState = Maybe ScheduleState
a} :: Cluster)

-- |
cluster_dataTransferProgress :: Lens.Lens' Cluster (Prelude.Maybe DataTransferProgress)
cluster_dataTransferProgress :: (Maybe DataTransferProgress -> f (Maybe DataTransferProgress))
-> Cluster -> f Cluster
cluster_dataTransferProgress = (Cluster -> Maybe DataTransferProgress)
-> (Cluster -> Maybe DataTransferProgress -> Cluster)
-> Lens
     Cluster
     Cluster
     (Maybe DataTransferProgress)
     (Maybe DataTransferProgress)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe DataTransferProgress
dataTransferProgress :: Maybe DataTransferProgress
$sel:dataTransferProgress:Cluster' :: Cluster -> Maybe DataTransferProgress
dataTransferProgress} -> Maybe DataTransferProgress
dataTransferProgress) (\s :: Cluster
s@Cluster' {} Maybe DataTransferProgress
a -> Cluster
s {$sel:dataTransferProgress:Cluster' :: Maybe DataTransferProgress
dataTransferProgress = Maybe DataTransferProgress
a} :: Cluster)

-- | A boolean value that, if @true@, indicates that data in the cluster is
-- encrypted at rest.
cluster_encrypted :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Bool)
cluster_encrypted :: (Maybe Bool -> f (Maybe Bool)) -> Cluster -> f Cluster
cluster_encrypted = (Cluster -> Maybe Bool)
-> (Cluster -> Maybe Bool -> Cluster)
-> Lens Cluster Cluster (Maybe Bool) (Maybe Bool)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Bool
encrypted :: Maybe Bool
$sel:encrypted:Cluster' :: Cluster -> Maybe Bool
encrypted} -> Maybe Bool
encrypted) (\s :: Cluster
s@Cluster' {} Maybe Bool
a -> Cluster
s {$sel:encrypted:Cluster' :: Maybe Bool
encrypted = Maybe Bool
a} :: Cluster)

-- | The name of the subnet group that is associated with the cluster. This
-- parameter is valid only when the cluster is in a VPC.
cluster_clusterSubnetGroupName :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_clusterSubnetGroupName :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_clusterSubnetGroupName = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
clusterSubnetGroupName :: Maybe Text
$sel:clusterSubnetGroupName:Cluster' :: Cluster -> Maybe Text
clusterSubnetGroupName} -> Maybe Text
clusterSubnetGroupName) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:clusterSubnetGroupName:Cluster' :: Maybe Text
clusterSubnetGroupName = Maybe Text
a} :: Cluster)

-- | The status of next expected snapshot for clusters having a valid
-- snapshot schedule and backups enabled. Possible values are the
-- following:
--
-- -   OnTrack - The next snapshot is expected to be taken on time.
--
-- -   Pending - The next snapshot is pending to be taken.
cluster_expectedNextSnapshotScheduleTimeStatus :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_expectedNextSnapshotScheduleTimeStatus :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_expectedNextSnapshotScheduleTimeStatus = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
expectedNextSnapshotScheduleTimeStatus :: Maybe Text
$sel:expectedNextSnapshotScheduleTimeStatus:Cluster' :: Cluster -> Maybe Text
expectedNextSnapshotScheduleTimeStatus} -> Maybe Text
expectedNextSnapshotScheduleTimeStatus) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:expectedNextSnapshotScheduleTimeStatus:Cluster' :: Maybe Text
expectedNextSnapshotScheduleTimeStatus = Maybe Text
a} :: Cluster)

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

-- | Describes a group of @DeferredMaintenanceWindow@ objects.
cluster_deferredMaintenanceWindows :: Lens.Lens' Cluster (Prelude.Maybe [DeferredMaintenanceWindow])
cluster_deferredMaintenanceWindows :: (Maybe [DeferredMaintenanceWindow]
 -> f (Maybe [DeferredMaintenanceWindow]))
-> Cluster -> f Cluster
cluster_deferredMaintenanceWindows = (Cluster -> Maybe [DeferredMaintenanceWindow])
-> (Cluster -> Maybe [DeferredMaintenanceWindow] -> Cluster)
-> Lens
     Cluster
     Cluster
     (Maybe [DeferredMaintenanceWindow])
     (Maybe [DeferredMaintenanceWindow])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe [DeferredMaintenanceWindow]
deferredMaintenanceWindows :: Maybe [DeferredMaintenanceWindow]
$sel:deferredMaintenanceWindows:Cluster' :: Cluster -> Maybe [DeferredMaintenanceWindow]
deferredMaintenanceWindows} -> Maybe [DeferredMaintenanceWindow]
deferredMaintenanceWindows) (\s :: Cluster
s@Cluster' {} Maybe [DeferredMaintenanceWindow]
a -> Cluster
s {$sel:deferredMaintenanceWindows:Cluster' :: Maybe [DeferredMaintenanceWindow]
deferredMaintenanceWindows = Maybe [DeferredMaintenanceWindow]
a} :: Cluster) ((Maybe [DeferredMaintenanceWindow]
  -> f (Maybe [DeferredMaintenanceWindow]))
 -> Cluster -> f Cluster)
-> ((Maybe [DeferredMaintenanceWindow]
     -> f (Maybe [DeferredMaintenanceWindow]))
    -> Maybe [DeferredMaintenanceWindow]
    -> f (Maybe [DeferredMaintenanceWindow]))
-> (Maybe [DeferredMaintenanceWindow]
    -> f (Maybe [DeferredMaintenanceWindow]))
-> Cluster
-> f Cluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [DeferredMaintenanceWindow]
  [DeferredMaintenanceWindow]
  [DeferredMaintenanceWindow]
  [DeferredMaintenanceWindow]
-> Iso
     (Maybe [DeferredMaintenanceWindow])
     (Maybe [DeferredMaintenanceWindow])
     (Maybe [DeferredMaintenanceWindow])
     (Maybe [DeferredMaintenanceWindow])
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 AnIso
  [DeferredMaintenanceWindow]
  [DeferredMaintenanceWindow]
  [DeferredMaintenanceWindow]
  [DeferredMaintenanceWindow]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The number of compute nodes in the cluster.
cluster_numberOfNodes :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Int)
cluster_numberOfNodes :: (Maybe Int -> f (Maybe Int)) -> Cluster -> f Cluster
cluster_numberOfNodes = (Cluster -> Maybe Int)
-> (Cluster -> Maybe Int -> Cluster)
-> Lens Cluster Cluster (Maybe Int) (Maybe Int)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Int
numberOfNodes :: Maybe Int
$sel:numberOfNodes:Cluster' :: Cluster -> Maybe Int
numberOfNodes} -> Maybe Int
numberOfNodes) (\s :: Cluster
s@Cluster' {} Maybe Int
a -> Cluster
s {$sel:numberOfNodes:Cluster' :: Maybe Int
numberOfNodes = Maybe Int
a} :: Cluster)

-- | The public key for the cluster.
cluster_clusterPublicKey :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_clusterPublicKey :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_clusterPublicKey = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
clusterPublicKey :: Maybe Text
$sel:clusterPublicKey:Cluster' :: Cluster -> Maybe Text
clusterPublicKey} -> Maybe Text
clusterPublicKey) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:clusterPublicKey:Cluster' :: Maybe Text
clusterPublicKey = Maybe Text
a} :: Cluster)

-- | The weekly time range, in Universal Coordinated Time (UTC), during which
-- system maintenance can occur.
cluster_preferredMaintenanceWindow :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_preferredMaintenanceWindow :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_preferredMaintenanceWindow = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
preferredMaintenanceWindow :: Maybe Text
$sel:preferredMaintenanceWindow:Cluster' :: Cluster -> Maybe Text
preferredMaintenanceWindow} -> Maybe Text
preferredMaintenanceWindow) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:preferredMaintenanceWindow:Cluster' :: Maybe Text
preferredMaintenanceWindow = Maybe Text
a} :: Cluster)

-- | The status of a modify operation, if any, initiated for the cluster.
cluster_modifyStatus :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_modifyStatus :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_modifyStatus = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
modifyStatus :: Maybe Text
$sel:modifyStatus:Cluster' :: Cluster -> Maybe Text
modifyStatus} -> Maybe Text
modifyStatus) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:modifyStatus:Cluster' :: Maybe Text
modifyStatus = Maybe Text
a} :: Cluster)

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

-- | The Key Management Service (KMS) key ID of the encryption key used to
-- encrypt data in the cluster.
cluster_kmsKeyId :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_kmsKeyId :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_kmsKeyId = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
kmsKeyId :: Maybe Text
$sel:kmsKeyId:Cluster' :: Cluster -> Maybe Text
kmsKeyId} -> Maybe Text
kmsKeyId) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:kmsKeyId:Cluster' :: Maybe Text
kmsKeyId = Maybe Text
a} :: Cluster)

-- | The list of cluster parameter groups that are associated with this
-- cluster. Each parameter group in the list is returned with its status.
cluster_clusterParameterGroups :: Lens.Lens' Cluster (Prelude.Maybe [ClusterParameterGroupStatus])
cluster_clusterParameterGroups :: (Maybe [ClusterParameterGroupStatus]
 -> f (Maybe [ClusterParameterGroupStatus]))
-> Cluster -> f Cluster
cluster_clusterParameterGroups = (Cluster -> Maybe [ClusterParameterGroupStatus])
-> (Cluster -> Maybe [ClusterParameterGroupStatus] -> Cluster)
-> Lens
     Cluster
     Cluster
     (Maybe [ClusterParameterGroupStatus])
     (Maybe [ClusterParameterGroupStatus])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe [ClusterParameterGroupStatus]
clusterParameterGroups :: Maybe [ClusterParameterGroupStatus]
$sel:clusterParameterGroups:Cluster' :: Cluster -> Maybe [ClusterParameterGroupStatus]
clusterParameterGroups} -> Maybe [ClusterParameterGroupStatus]
clusterParameterGroups) (\s :: Cluster
s@Cluster' {} Maybe [ClusterParameterGroupStatus]
a -> Cluster
s {$sel:clusterParameterGroups:Cluster' :: Maybe [ClusterParameterGroupStatus]
clusterParameterGroups = Maybe [ClusterParameterGroupStatus]
a} :: Cluster) ((Maybe [ClusterParameterGroupStatus]
  -> f (Maybe [ClusterParameterGroupStatus]))
 -> Cluster -> f Cluster)
-> ((Maybe [ClusterParameterGroupStatus]
     -> f (Maybe [ClusterParameterGroupStatus]))
    -> Maybe [ClusterParameterGroupStatus]
    -> f (Maybe [ClusterParameterGroupStatus]))
-> (Maybe [ClusterParameterGroupStatus]
    -> f (Maybe [ClusterParameterGroupStatus]))
-> Cluster
-> f Cluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [ClusterParameterGroupStatus]
  [ClusterParameterGroupStatus]
  [ClusterParameterGroupStatus]
  [ClusterParameterGroupStatus]
-> Iso
     (Maybe [ClusterParameterGroupStatus])
     (Maybe [ClusterParameterGroupStatus])
     (Maybe [ClusterParameterGroupStatus])
     (Maybe [ClusterParameterGroupStatus])
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 AnIso
  [ClusterParameterGroupStatus]
  [ClusterParameterGroupStatus]
  [ClusterParameterGroupStatus]
  [ClusterParameterGroupStatus]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The total storage capacity of the cluster in megabytes.
cluster_totalStorageCapacityInMegaBytes :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Integer)
cluster_totalStorageCapacityInMegaBytes :: (Maybe Integer -> f (Maybe Integer)) -> Cluster -> f Cluster
cluster_totalStorageCapacityInMegaBytes = (Cluster -> Maybe Integer)
-> (Cluster -> Maybe Integer -> Cluster)
-> Lens Cluster Cluster (Maybe Integer) (Maybe Integer)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Integer
totalStorageCapacityInMegaBytes :: Maybe Integer
$sel:totalStorageCapacityInMegaBytes:Cluster' :: Cluster -> Maybe Integer
totalStorageCapacityInMegaBytes} -> Maybe Integer
totalStorageCapacityInMegaBytes) (\s :: Cluster
s@Cluster' {} Maybe Integer
a -> Cluster
s {$sel:totalStorageCapacityInMegaBytes:Cluster' :: Maybe Integer
totalStorageCapacityInMegaBytes = Maybe Integer
a} :: Cluster)

-- | The name of the Availability Zone in which the cluster is located.
cluster_availabilityZone :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_availabilityZone :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_availabilityZone = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
availabilityZone :: Maybe Text
$sel:availabilityZone:Cluster' :: Cluster -> Maybe Text
availabilityZone} -> Maybe Text
availabilityZone) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:availabilityZone:Cluster' :: Maybe Text
availabilityZone = Maybe Text
a} :: Cluster)

-- | A list of Amazon Virtual Private Cloud (Amazon VPC) security groups that
-- are associated with the cluster. This parameter is returned only if the
-- cluster is in a VPC.
cluster_vpcSecurityGroups :: Lens.Lens' Cluster (Prelude.Maybe [VpcSecurityGroupMembership])
cluster_vpcSecurityGroups :: (Maybe [VpcSecurityGroupMembership]
 -> f (Maybe [VpcSecurityGroupMembership]))
-> Cluster -> f Cluster
cluster_vpcSecurityGroups = (Cluster -> Maybe [VpcSecurityGroupMembership])
-> (Cluster -> Maybe [VpcSecurityGroupMembership] -> Cluster)
-> Lens
     Cluster
     Cluster
     (Maybe [VpcSecurityGroupMembership])
     (Maybe [VpcSecurityGroupMembership])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe [VpcSecurityGroupMembership]
vpcSecurityGroups :: Maybe [VpcSecurityGroupMembership]
$sel:vpcSecurityGroups:Cluster' :: Cluster -> Maybe [VpcSecurityGroupMembership]
vpcSecurityGroups} -> Maybe [VpcSecurityGroupMembership]
vpcSecurityGroups) (\s :: Cluster
s@Cluster' {} Maybe [VpcSecurityGroupMembership]
a -> Cluster
s {$sel:vpcSecurityGroups:Cluster' :: Maybe [VpcSecurityGroupMembership]
vpcSecurityGroups = Maybe [VpcSecurityGroupMembership]
a} :: Cluster) ((Maybe [VpcSecurityGroupMembership]
  -> f (Maybe [VpcSecurityGroupMembership]))
 -> Cluster -> f Cluster)
-> ((Maybe [VpcSecurityGroupMembership]
     -> f (Maybe [VpcSecurityGroupMembership]))
    -> Maybe [VpcSecurityGroupMembership]
    -> f (Maybe [VpcSecurityGroupMembership]))
-> (Maybe [VpcSecurityGroupMembership]
    -> f (Maybe [VpcSecurityGroupMembership]))
-> Cluster
-> f Cluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [VpcSecurityGroupMembership]
  [VpcSecurityGroupMembership]
  [VpcSecurityGroupMembership]
  [VpcSecurityGroupMembership]
-> Iso
     (Maybe [VpcSecurityGroupMembership])
     (Maybe [VpcSecurityGroupMembership])
     (Maybe [VpcSecurityGroupMembership])
     (Maybe [VpcSecurityGroupMembership])
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 AnIso
  [VpcSecurityGroupMembership]
  [VpcSecurityGroupMembership]
  [VpcSecurityGroupMembership]
  [VpcSecurityGroupMembership]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | A value that reports whether the Amazon Redshift cluster has finished
-- applying any hardware security module (HSM) settings changes specified
-- in a modify cluster command.
--
-- Values: active, applying
cluster_hsmStatus :: Lens.Lens' Cluster (Prelude.Maybe HsmStatus)
cluster_hsmStatus :: (Maybe HsmStatus -> f (Maybe HsmStatus)) -> Cluster -> f Cluster
cluster_hsmStatus = (Cluster -> Maybe HsmStatus)
-> (Cluster -> Maybe HsmStatus -> Cluster)
-> Lens Cluster Cluster (Maybe HsmStatus) (Maybe HsmStatus)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe HsmStatus
hsmStatus :: Maybe HsmStatus
$sel:hsmStatus:Cluster' :: Cluster -> Maybe HsmStatus
hsmStatus} -> Maybe HsmStatus
hsmStatus) (\s :: Cluster
s@Cluster' {} Maybe HsmStatus
a -> Cluster
s {$sel:hsmStatus:Cluster' :: Maybe HsmStatus
hsmStatus = Maybe HsmStatus
a} :: Cluster)

-- | A list of Identity and Access Management (IAM) roles that can be used by
-- the cluster to access other Amazon Web Services services.
cluster_iamRoles :: Lens.Lens' Cluster (Prelude.Maybe [ClusterIamRole])
cluster_iamRoles :: (Maybe [ClusterIamRole] -> f (Maybe [ClusterIamRole]))
-> Cluster -> f Cluster
cluster_iamRoles = (Cluster -> Maybe [ClusterIamRole])
-> (Cluster -> Maybe [ClusterIamRole] -> Cluster)
-> Lens
     Cluster Cluster (Maybe [ClusterIamRole]) (Maybe [ClusterIamRole])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe [ClusterIamRole]
iamRoles :: Maybe [ClusterIamRole]
$sel:iamRoles:Cluster' :: Cluster -> Maybe [ClusterIamRole]
iamRoles} -> Maybe [ClusterIamRole]
iamRoles) (\s :: Cluster
s@Cluster' {} Maybe [ClusterIamRole]
a -> Cluster
s {$sel:iamRoles:Cluster' :: Maybe [ClusterIamRole]
iamRoles = Maybe [ClusterIamRole]
a} :: Cluster) ((Maybe [ClusterIamRole] -> f (Maybe [ClusterIamRole]))
 -> Cluster -> f Cluster)
-> ((Maybe [ClusterIamRole] -> f (Maybe [ClusterIamRole]))
    -> Maybe [ClusterIamRole] -> f (Maybe [ClusterIamRole]))
-> (Maybe [ClusterIamRole] -> f (Maybe [ClusterIamRole]))
-> Cluster
-> f Cluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [ClusterIamRole] [ClusterIamRole] [ClusterIamRole] [ClusterIamRole]
-> Iso
     (Maybe [ClusterIamRole])
     (Maybe [ClusterIamRole])
     (Maybe [ClusterIamRole])
     (Maybe [ClusterIamRole])
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 AnIso
  [ClusterIamRole] [ClusterIamRole] [ClusterIamRole] [ClusterIamRole]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Cluster operations that are waiting to be started.
cluster_pendingActions :: Lens.Lens' Cluster (Prelude.Maybe [Prelude.Text])
cluster_pendingActions :: (Maybe [Text] -> f (Maybe [Text])) -> Cluster -> f Cluster
cluster_pendingActions = (Cluster -> Maybe [Text])
-> (Cluster -> Maybe [Text] -> Cluster)
-> Lens Cluster Cluster (Maybe [Text]) (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe [Text]
pendingActions :: Maybe [Text]
$sel:pendingActions:Cluster' :: Cluster -> Maybe [Text]
pendingActions} -> Maybe [Text]
pendingActions) (\s :: Cluster
s@Cluster' {} Maybe [Text]
a -> Cluster
s {$sel:pendingActions:Cluster' :: Maybe [Text]
pendingActions = Maybe [Text]
a} :: Cluster) ((Maybe [Text] -> f (Maybe [Text])) -> Cluster -> f Cluster)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> Cluster
-> f Cluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Text] [Text] [Text] [Text]
-> Iso (Maybe [Text]) (Maybe [Text]) (Maybe [Text]) (Maybe [Text])
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 AnIso [Text] [Text] [Text] [Text]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The status of the elastic IP (EIP) address.
cluster_elasticIpStatus :: Lens.Lens' Cluster (Prelude.Maybe ElasticIpStatus)
cluster_elasticIpStatus :: (Maybe ElasticIpStatus -> f (Maybe ElasticIpStatus))
-> Cluster -> f Cluster
cluster_elasticIpStatus = (Cluster -> Maybe ElasticIpStatus)
-> (Cluster -> Maybe ElasticIpStatus -> Cluster)
-> Lens
     Cluster Cluster (Maybe ElasticIpStatus) (Maybe ElasticIpStatus)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe ElasticIpStatus
elasticIpStatus :: Maybe ElasticIpStatus
$sel:elasticIpStatus:Cluster' :: Cluster -> Maybe ElasticIpStatus
elasticIpStatus} -> Maybe ElasticIpStatus
elasticIpStatus) (\s :: Cluster
s@Cluster' {} Maybe ElasticIpStatus
a -> Cluster
s {$sel:elasticIpStatus:Cluster' :: Maybe ElasticIpStatus
elasticIpStatus = Maybe ElasticIpStatus
a} :: Cluster)

-- | The version ID of the Amazon Redshift engine that is running on the
-- cluster.
cluster_clusterVersion :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_clusterVersion :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_clusterVersion = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
clusterVersion :: Maybe Text
$sel:clusterVersion:Cluster' :: Cluster -> Maybe Text
clusterVersion} -> Maybe Text
clusterVersion) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:clusterVersion:Cluster' :: Maybe Text
clusterVersion = Maybe Text
a} :: Cluster)

-- | The node type for the nodes in the cluster.
cluster_nodeType :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_nodeType :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_nodeType = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
nodeType :: Maybe Text
$sel:nodeType:Cluster' :: Cluster -> Maybe Text
nodeType} -> Maybe Text
nodeType) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:nodeType:Cluster' :: Maybe Text
nodeType = Maybe Text
a} :: Cluster)

-- | The date and time in UTC when system maintenance can begin.
cluster_nextMaintenanceWindowStartTime :: Lens.Lens' Cluster (Prelude.Maybe Prelude.UTCTime)
cluster_nextMaintenanceWindowStartTime :: (Maybe UTCTime -> f (Maybe UTCTime)) -> Cluster -> f Cluster
cluster_nextMaintenanceWindowStartTime = (Cluster -> Maybe ISO8601)
-> (Cluster -> Maybe ISO8601 -> Cluster)
-> Lens Cluster Cluster (Maybe ISO8601) (Maybe ISO8601)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe ISO8601
nextMaintenanceWindowStartTime :: Maybe ISO8601
$sel:nextMaintenanceWindowStartTime:Cluster' :: Cluster -> Maybe ISO8601
nextMaintenanceWindowStartTime} -> Maybe ISO8601
nextMaintenanceWindowStartTime) (\s :: Cluster
s@Cluster' {} Maybe ISO8601
a -> Cluster
s {$sel:nextMaintenanceWindowStartTime:Cluster' :: Maybe ISO8601
nextMaintenanceWindowStartTime = Maybe ISO8601
a} :: Cluster) ((Maybe ISO8601 -> f (Maybe ISO8601)) -> Cluster -> f Cluster)
-> ((Maybe UTCTime -> f (Maybe UTCTime))
    -> Maybe ISO8601 -> f (Maybe ISO8601))
-> (Maybe UTCTime -> f (Maybe UTCTime))
-> Cluster
-> f Cluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso ISO8601 ISO8601 UTCTime UTCTime
-> Iso
     (Maybe ISO8601) (Maybe ISO8601) (Maybe UTCTime) (Maybe UTCTime)
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 AnIso ISO8601 ISO8601 UTCTime UTCTime
forall (a :: Format). Iso' (Time a) UTCTime
Core._Time

-- | The date and time that the cluster was created.
cluster_clusterCreateTime :: Lens.Lens' Cluster (Prelude.Maybe Prelude.UTCTime)
cluster_clusterCreateTime :: (Maybe UTCTime -> f (Maybe UTCTime)) -> Cluster -> f Cluster
cluster_clusterCreateTime = (Cluster -> Maybe ISO8601)
-> (Cluster -> Maybe ISO8601 -> Cluster)
-> Lens Cluster Cluster (Maybe ISO8601) (Maybe ISO8601)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe ISO8601
clusterCreateTime :: Maybe ISO8601
$sel:clusterCreateTime:Cluster' :: Cluster -> Maybe ISO8601
clusterCreateTime} -> Maybe ISO8601
clusterCreateTime) (\s :: Cluster
s@Cluster' {} Maybe ISO8601
a -> Cluster
s {$sel:clusterCreateTime:Cluster' :: Maybe ISO8601
clusterCreateTime = Maybe ISO8601
a} :: Cluster) ((Maybe ISO8601 -> f (Maybe ISO8601)) -> Cluster -> f Cluster)
-> ((Maybe UTCTime -> f (Maybe UTCTime))
    -> Maybe ISO8601 -> f (Maybe ISO8601))
-> (Maybe UTCTime -> f (Maybe UTCTime))
-> Cluster
-> f Cluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso ISO8601 ISO8601 UTCTime UTCTime
-> Iso
     (Maybe ISO8601) (Maybe ISO8601) (Maybe UTCTime) (Maybe UTCTime)
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 AnIso ISO8601 ISO8601 UTCTime UTCTime
forall (a :: Format). Iso' (Time a) UTCTime
Core._Time

-- | The connection endpoint.
cluster_endpoint :: Lens.Lens' Cluster (Prelude.Maybe Endpoint)
cluster_endpoint :: (Maybe Endpoint -> f (Maybe Endpoint)) -> Cluster -> f Cluster
cluster_endpoint = (Cluster -> Maybe Endpoint)
-> (Cluster -> Maybe Endpoint -> Cluster)
-> Lens Cluster Cluster (Maybe Endpoint) (Maybe Endpoint)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Endpoint
endpoint :: Maybe Endpoint
$sel:endpoint:Cluster' :: Cluster -> Maybe Endpoint
endpoint} -> Maybe Endpoint
endpoint) (\s :: Cluster
s@Cluster' {} Maybe Endpoint
a -> Cluster
s {$sel:endpoint:Cluster' :: Maybe Endpoint
endpoint = Maybe Endpoint
a} :: Cluster)

-- | A boolean value that, if @true@, indicates that major version upgrades
-- will be applied automatically to the cluster during the maintenance
-- window.
cluster_allowVersionUpgrade :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Bool)
cluster_allowVersionUpgrade :: (Maybe Bool -> f (Maybe Bool)) -> Cluster -> f Cluster
cluster_allowVersionUpgrade = (Cluster -> Maybe Bool)
-> (Cluster -> Maybe Bool -> Cluster)
-> Lens Cluster Cluster (Maybe Bool) (Maybe Bool)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Bool
allowVersionUpgrade :: Maybe Bool
$sel:allowVersionUpgrade:Cluster' :: Cluster -> Maybe Bool
allowVersionUpgrade} -> Maybe Bool
allowVersionUpgrade) (\s :: Cluster
s@Cluster' {} Maybe Bool
a -> Cluster
s {$sel:allowVersionUpgrade:Cluster' :: Maybe Bool
allowVersionUpgrade = Maybe Bool
a} :: Cluster)

-- | The current state of the cluster. Possible values are the following:
--
-- -   @available@
--
-- -   @available, prep-for-resize@
--
-- -   @available, resize-cleanup@
--
-- -   @cancelling-resize@
--
-- -   @creating@
--
-- -   @deleting@
--
-- -   @final-snapshot@
--
-- -   @hardware-failure@
--
-- -   @incompatible-hsm@
--
-- -   @incompatible-network@
--
-- -   @incompatible-parameters@
--
-- -   @incompatible-restore@
--
-- -   @modifying@
--
-- -   @paused@
--
-- -   @rebooting@
--
-- -   @renaming@
--
-- -   @resizing@
--
-- -   @rotating-keys@
--
-- -   @storage-full@
--
-- -   @updating-hsm@
cluster_clusterStatus :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_clusterStatus :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_clusterStatus = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
clusterStatus :: Maybe Text
$sel:clusterStatus:Cluster' :: Cluster -> Maybe Text
clusterStatus} -> Maybe Text
clusterStatus) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:clusterStatus:Cluster' :: Maybe Text
clusterStatus = Maybe Text
a} :: Cluster)

-- | A value that, if present, indicates that changes to the cluster are
-- pending. Specific pending changes are identified by subelements.
cluster_pendingModifiedValues :: Lens.Lens' Cluster (Prelude.Maybe PendingModifiedValues)
cluster_pendingModifiedValues :: (Maybe PendingModifiedValues -> f (Maybe PendingModifiedValues))
-> Cluster -> f Cluster
cluster_pendingModifiedValues = (Cluster -> Maybe PendingModifiedValues)
-> (Cluster -> Maybe PendingModifiedValues -> Cluster)
-> Lens
     Cluster
     Cluster
     (Maybe PendingModifiedValues)
     (Maybe PendingModifiedValues)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe PendingModifiedValues
pendingModifiedValues :: Maybe PendingModifiedValues
$sel:pendingModifiedValues:Cluster' :: Cluster -> Maybe PendingModifiedValues
pendingModifiedValues} -> Maybe PendingModifiedValues
pendingModifiedValues) (\s :: Cluster
s@Cluster' {} Maybe PendingModifiedValues
a -> Cluster
s {$sel:pendingModifiedValues:Cluster' :: Maybe PendingModifiedValues
pendingModifiedValues = Maybe PendingModifiedValues
a} :: Cluster)

-- | The list of tags for the cluster.
cluster_tags :: Lens.Lens' Cluster (Prelude.Maybe [Tag])
cluster_tags :: (Maybe [Tag] -> f (Maybe [Tag])) -> Cluster -> f Cluster
cluster_tags = (Cluster -> Maybe [Tag])
-> (Cluster -> Maybe [Tag] -> Cluster)
-> Lens Cluster Cluster (Maybe [Tag]) (Maybe [Tag])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:Cluster' :: Cluster -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: Cluster
s@Cluster' {} Maybe [Tag]
a -> Cluster
s {$sel:tags:Cluster' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: Cluster) ((Maybe [Tag] -> f (Maybe [Tag])) -> Cluster -> f Cluster)
-> ((Maybe [Tag] -> f (Maybe [Tag]))
    -> Maybe [Tag] -> f (Maybe [Tag]))
-> (Maybe [Tag] -> f (Maybe [Tag]))
-> Cluster
-> f Cluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Tag] [Tag] [Tag] [Tag]
-> Iso (Maybe [Tag]) (Maybe [Tag]) (Maybe [Tag]) (Maybe [Tag])
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 AnIso [Tag] [Tag] [Tag] [Tag]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Describes the status of the Availability Zone relocation operation.
cluster_availabilityZoneRelocationStatus :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_availabilityZoneRelocationStatus :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_availabilityZoneRelocationStatus = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
availabilityZoneRelocationStatus :: Maybe Text
$sel:availabilityZoneRelocationStatus:Cluster' :: Cluster -> Maybe Text
availabilityZoneRelocationStatus} -> Maybe Text
availabilityZoneRelocationStatus) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:availabilityZoneRelocationStatus:Cluster' :: Maybe Text
availabilityZoneRelocationStatus = Maybe Text
a} :: Cluster)

-- | The nodes in the cluster.
cluster_clusterNodes :: Lens.Lens' Cluster (Prelude.Maybe [ClusterNode])
cluster_clusterNodes :: (Maybe [ClusterNode] -> f (Maybe [ClusterNode]))
-> Cluster -> f Cluster
cluster_clusterNodes = (Cluster -> Maybe [ClusterNode])
-> (Cluster -> Maybe [ClusterNode] -> Cluster)
-> Lens Cluster Cluster (Maybe [ClusterNode]) (Maybe [ClusterNode])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe [ClusterNode]
clusterNodes :: Maybe [ClusterNode]
$sel:clusterNodes:Cluster' :: Cluster -> Maybe [ClusterNode]
clusterNodes} -> Maybe [ClusterNode]
clusterNodes) (\s :: Cluster
s@Cluster' {} Maybe [ClusterNode]
a -> Cluster
s {$sel:clusterNodes:Cluster' :: Maybe [ClusterNode]
clusterNodes = Maybe [ClusterNode]
a} :: Cluster) ((Maybe [ClusterNode] -> f (Maybe [ClusterNode]))
 -> Cluster -> f Cluster)
-> ((Maybe [ClusterNode] -> f (Maybe [ClusterNode]))
    -> Maybe [ClusterNode] -> f (Maybe [ClusterNode]))
-> (Maybe [ClusterNode] -> f (Maybe [ClusterNode]))
-> Cluster
-> f Cluster
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [ClusterNode] [ClusterNode] [ClusterNode] [ClusterNode]
-> Iso
     (Maybe [ClusterNode])
     (Maybe [ClusterNode])
     (Maybe [ClusterNode])
     (Maybe [ClusterNode])
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 AnIso [ClusterNode] [ClusterNode] [ClusterNode] [ClusterNode]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The name of the initial database that was created when the cluster was
-- created. This same name is returned for the life of the cluster. If an
-- initial database was not specified, a database named @dev@dev was
-- created by default.
cluster_dbName :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
cluster_dbName :: (Maybe Text -> f (Maybe Text)) -> Cluster -> f Cluster
cluster_dbName = (Cluster -> Maybe Text)
-> (Cluster -> Maybe Text -> Cluster)
-> Lens Cluster Cluster (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Cluster' {Maybe Text
dbName :: Maybe Text
$sel:dbName:Cluster' :: Cluster -> Maybe Text
dbName} -> Maybe Text
dbName) (\s :: Cluster
s@Cluster' {} Maybe Text
a -> Cluster
s {$sel:dbName:Cluster' :: Maybe Text
dbName = Maybe Text
a} :: Cluster)

instance Core.FromXML Cluster where
  parseXML :: [Node] -> Either String Cluster
parseXML [Node]
x =
    Maybe AquaConfiguration
-> Maybe ResizeInfo
-> Maybe RestoreStatus
-> Maybe Int
-> Maybe Bool
-> Maybe ClusterSnapshotCopyStatus
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Bool
-> Maybe Text
-> Maybe Text
-> Maybe ISO8601
-> Maybe Text
-> Maybe Text
-> Maybe [ClusterSecurityGroupMembership]
-> Maybe Int
-> Maybe ScheduleState
-> Maybe DataTransferProgress
-> Maybe Bool
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe [DeferredMaintenanceWindow]
-> Maybe Int
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe [ClusterParameterGroupStatus]
-> Maybe Integer
-> Maybe Text
-> Maybe [VpcSecurityGroupMembership]
-> Maybe HsmStatus
-> Maybe [ClusterIamRole]
-> Maybe [Text]
-> Maybe ElasticIpStatus
-> Maybe Text
-> Maybe Text
-> Maybe ISO8601
-> Maybe ISO8601
-> Maybe Endpoint
-> Maybe Bool
-> Maybe Text
-> Maybe PendingModifiedValues
-> Maybe [Tag]
-> Maybe Text
-> Maybe [ClusterNode]
-> Maybe Text
-> Cluster
Cluster'
      (Maybe AquaConfiguration
 -> Maybe ResizeInfo
 -> Maybe RestoreStatus
 -> Maybe Int
 -> Maybe Bool
 -> Maybe ClusterSnapshotCopyStatus
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Bool
 -> Maybe Text
 -> Maybe Text
 -> Maybe ISO8601
 -> Maybe Text
 -> Maybe Text
 -> Maybe [ClusterSecurityGroupMembership]
 -> Maybe Int
 -> Maybe ScheduleState
 -> Maybe DataTransferProgress
 -> Maybe Bool
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe [DeferredMaintenanceWindow]
 -> Maybe Int
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe [ClusterParameterGroupStatus]
 -> Maybe Integer
 -> Maybe Text
 -> Maybe [VpcSecurityGroupMembership]
 -> Maybe HsmStatus
 -> Maybe [ClusterIamRole]
 -> Maybe [Text]
 -> Maybe ElasticIpStatus
 -> Maybe Text
 -> Maybe Text
 -> Maybe ISO8601
 -> Maybe ISO8601
 -> Maybe Endpoint
 -> Maybe Bool
 -> Maybe Text
 -> Maybe PendingModifiedValues
 -> Maybe [Tag]
 -> Maybe Text
 -> Maybe [ClusterNode]
 -> Maybe Text
 -> Cluster)
-> Either String (Maybe AquaConfiguration)
-> Either
     String
     (Maybe ResizeInfo
      -> Maybe RestoreStatus
      -> Maybe Int
      -> Maybe Bool
      -> Maybe ClusterSnapshotCopyStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x [Node] -> Text -> Either String (Maybe AquaConfiguration)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"AquaConfiguration")
      Either
  String
  (Maybe ResizeInfo
   -> Maybe RestoreStatus
   -> Maybe Int
   -> Maybe Bool
   -> Maybe ClusterSnapshotCopyStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe ResizeInfo)
-> Either
     String
     (Maybe RestoreStatus
      -> Maybe Int
      -> Maybe Bool
      -> Maybe ClusterSnapshotCopyStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe ResizeInfo)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ResizeInfo")
      Either
  String
  (Maybe RestoreStatus
   -> Maybe Int
   -> Maybe Bool
   -> Maybe ClusterSnapshotCopyStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe RestoreStatus)
-> Either
     String
     (Maybe Int
      -> Maybe Bool
      -> Maybe ClusterSnapshotCopyStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe RestoreStatus)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"RestoreStatus")
      Either
  String
  (Maybe Int
   -> Maybe Bool
   -> Maybe ClusterSnapshotCopyStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Int)
-> Either
     String
     (Maybe Bool
      -> Maybe ClusterSnapshotCopyStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Int)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ManualSnapshotRetentionPeriod")
      Either
  String
  (Maybe Bool
   -> Maybe ClusterSnapshotCopyStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Bool)
-> Either
     String
     (Maybe ClusterSnapshotCopyStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Bool)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"EnhancedVpcRouting")
      Either
  String
  (Maybe ClusterSnapshotCopyStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe ClusterSnapshotCopyStatus)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe ClusterSnapshotCopyStatus)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterSnapshotCopyStatus")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterAvailabilityStatus")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterRevisionNumber")
      Either
  String
  (Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"SnapshotScheduleIdentifier")
      Either
  String
  (Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Bool)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Bool)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"PubliclyAccessible")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"MasterUsername")
      Either
  String
  (Maybe Text
   -> Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe ISO8601
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"MaintenanceTrackName")
      Either
  String
  (Maybe ISO8601
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe ISO8601)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe ISO8601)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ExpectedNextSnapshotScheduleTime")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ElasticResizeNumberOfNodeOptions")
      Either
  String
  (Maybe Text
   -> Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe [ClusterSecurityGroupMembership]
      -> Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"VpcId")
      Either
  String
  (Maybe [ClusterSecurityGroupMembership]
   -> Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe [ClusterSecurityGroupMembership])
-> Either
     String
     (Maybe Int
      -> Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterSecurityGroups"
                      Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node]
    -> Either String (Maybe [ClusterSecurityGroupMembership]))
-> Either String (Maybe [ClusterSecurityGroupMembership])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [ClusterSecurityGroupMembership])
-> [Node] -> Either String (Maybe [ClusterSecurityGroupMembership])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [ClusterSecurityGroupMembership]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"ClusterSecurityGroup")
                  )
      Either
  String
  (Maybe Int
   -> Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Int)
-> Either
     String
     (Maybe ScheduleState
      -> Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Int)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"AutomatedSnapshotRetentionPeriod")
      Either
  String
  (Maybe ScheduleState
   -> Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe ScheduleState)
-> Either
     String
     (Maybe DataTransferProgress
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe ScheduleState)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"SnapshotScheduleState")
      Either
  String
  (Maybe DataTransferProgress
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe DataTransferProgress)
-> Either
     String
     (Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe DataTransferProgress)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"DataTransferProgress")
      Either
  String
  (Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Bool)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Bool)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"Encrypted")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterSubnetGroupName")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ExpectedNextSnapshotScheduleTimeStatus")
      Either
  String
  (Maybe Text
   -> Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe [DeferredMaintenanceWindow]
      -> Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterIdentifier")
      Either
  String
  (Maybe [DeferredMaintenanceWindow]
   -> Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe [DeferredMaintenanceWindow])
-> Either
     String
     (Maybe Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"DeferredMaintenanceWindows"
                      Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [DeferredMaintenanceWindow]))
-> Either String (Maybe [DeferredMaintenanceWindow])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [DeferredMaintenanceWindow])
-> [Node] -> Either String (Maybe [DeferredMaintenanceWindow])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may
                        (Text -> [Node] -> Either String [DeferredMaintenanceWindow]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"DeferredMaintenanceWindow")
                  )
      Either
  String
  (Maybe Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Int)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Int)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"NumberOfNodes")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterPublicKey")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"PreferredMaintenanceWindow")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ModifyStatus")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterNamespaceArn")
      Either
  String
  (Maybe Text
   -> Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe [ClusterParameterGroupStatus]
      -> Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"KmsKeyId")
      Either
  String
  (Maybe [ClusterParameterGroupStatus]
   -> Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe [ClusterParameterGroupStatus])
-> Either
     String
     (Maybe Integer
      -> Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterParameterGroups"
                      Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [ClusterParameterGroupStatus]))
-> Either String (Maybe [ClusterParameterGroupStatus])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [ClusterParameterGroupStatus])
-> [Node] -> Either String (Maybe [ClusterParameterGroupStatus])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [ClusterParameterGroupStatus]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"ClusterParameterGroup")
                  )
      Either
  String
  (Maybe Integer
   -> Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Integer)
-> Either
     String
     (Maybe Text
      -> Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Integer)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"TotalStorageCapacityInMegaBytes")
      Either
  String
  (Maybe Text
   -> Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe [VpcSecurityGroupMembership]
      -> Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"AvailabilityZone")
      Either
  String
  (Maybe [VpcSecurityGroupMembership]
   -> Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe [VpcSecurityGroupMembership])
-> Either
     String
     (Maybe HsmStatus
      -> Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"VpcSecurityGroups"
                      Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [VpcSecurityGroupMembership]))
-> Either String (Maybe [VpcSecurityGroupMembership])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [VpcSecurityGroupMembership])
-> [Node] -> Either String (Maybe [VpcSecurityGroupMembership])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [VpcSecurityGroupMembership]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"VpcSecurityGroup")
                  )
      Either
  String
  (Maybe HsmStatus
   -> Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe HsmStatus)
-> Either
     String
     (Maybe [ClusterIamRole]
      -> Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe HsmStatus)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"HsmStatus")
      Either
  String
  (Maybe [ClusterIamRole]
   -> Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe [ClusterIamRole])
-> Either
     String
     (Maybe [Text]
      -> Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"IamRoles" Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [ClusterIamRole]))
-> Either String (Maybe [ClusterIamRole])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [ClusterIamRole])
-> [Node] -> Either String (Maybe [ClusterIamRole])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [ClusterIamRole]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"ClusterIamRole")
                  )
      Either
  String
  (Maybe [Text]
   -> Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe [Text])
-> Either
     String
     (Maybe ElasticIpStatus
      -> Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"PendingActions" Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [Text]))
-> Either String (Maybe [Text])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [Text])
-> [Node] -> Either String (Maybe [Text])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [Text]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"member")
                  )
      Either
  String
  (Maybe ElasticIpStatus
   -> Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe ElasticIpStatus)
-> Either
     String
     (Maybe Text
      -> Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe ElasticIpStatus)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ElasticIpStatus")
      Either
  String
  (Maybe Text
   -> Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe Text
      -> Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterVersion")
      Either
  String
  (Maybe Text
   -> Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe ISO8601
      -> Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"NodeType")
      Either
  String
  (Maybe ISO8601
   -> Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe ISO8601)
-> Either
     String
     (Maybe ISO8601
      -> Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe ISO8601)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"NextMaintenanceWindowStartTime")
      Either
  String
  (Maybe ISO8601
   -> Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe ISO8601)
-> Either
     String
     (Maybe Endpoint
      -> Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe ISO8601)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterCreateTime")
      Either
  String
  (Maybe Endpoint
   -> Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Endpoint)
-> Either
     String
     (Maybe Bool
      -> Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Endpoint)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"Endpoint")
      Either
  String
  (Maybe Bool
   -> Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Bool)
-> Either
     String
     (Maybe Text
      -> Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Bool)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"AllowVersionUpgrade")
      Either
  String
  (Maybe Text
   -> Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe PendingModifiedValues
      -> Maybe [Tag]
      -> Maybe Text
      -> Maybe [ClusterNode]
      -> Maybe Text
      -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterStatus")
      Either
  String
  (Maybe PendingModifiedValues
   -> Maybe [Tag]
   -> Maybe Text
   -> Maybe [ClusterNode]
   -> Maybe Text
   -> Cluster)
-> Either String (Maybe PendingModifiedValues)
-> Either
     String
     (Maybe [Tag]
      -> Maybe Text -> Maybe [ClusterNode] -> Maybe Text -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe PendingModifiedValues)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"PendingModifiedValues")
      Either
  String
  (Maybe [Tag]
   -> Maybe Text -> Maybe [ClusterNode] -> Maybe Text -> Cluster)
-> Either String (Maybe [Tag])
-> Either
     String (Maybe Text -> Maybe [ClusterNode] -> Maybe Text -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"Tags" Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [Tag]))
-> Either String (Maybe [Tag])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [Tag])
-> [Node] -> Either String (Maybe [Tag])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [Tag]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"Tag")
                  )
      Either
  String (Maybe Text -> Maybe [ClusterNode] -> Maybe Text -> Cluster)
-> Either String (Maybe Text)
-> Either String (Maybe [ClusterNode] -> Maybe Text -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"AvailabilityZoneRelocationStatus")
      Either String (Maybe [ClusterNode] -> Maybe Text -> Cluster)
-> Either String (Maybe [ClusterNode])
-> Either String (Maybe Text -> Cluster)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"ClusterNodes" Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                      Either String [Node]
-> ([Node] -> Either String (Maybe [ClusterNode]))
-> Either String (Maybe [ClusterNode])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [ClusterNode])
-> [Node] -> Either String (Maybe [ClusterNode])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (Text -> [Node] -> Either String [ClusterNode]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"member")
                  )
      Either String (Maybe Text -> Cluster)
-> Either String (Maybe Text) -> Either String Cluster
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"DBName")

instance Prelude.Hashable Cluster

instance Prelude.NFData Cluster