packages feed

stratosphere-0.4.1: library-gen/Stratosphere/Resources/ElastiCacheReplicationGroup.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html

module Stratosphere.Resources.ElastiCacheReplicationGroup where

import Control.Lens hiding ((.=))
import Data.Aeson
import Data.Maybe (catMaybes)
import Data.Monoid (mempty)
import Data.Text

import Stratosphere.Values
import Stratosphere.ResourceProperties.ElastiCacheReplicationGroupNodeGroupConfiguration
import Stratosphere.ResourceProperties.Tag

-- | Full data type definition for ElastiCacheReplicationGroup. See
-- | 'elastiCacheReplicationGroup' for a more convenient constructor.
data ElastiCacheReplicationGroup =
  ElastiCacheReplicationGroup
  { _elastiCacheReplicationGroupAutoMinorVersionUpgrade :: Maybe (Val Bool')
  , _elastiCacheReplicationGroupAutomaticFailoverEnabled :: Maybe (Val Bool')
  , _elastiCacheReplicationGroupCacheNodeType :: Maybe (Val Text)
  , _elastiCacheReplicationGroupCacheParameterGroupName :: Maybe (Val Text)
  , _elastiCacheReplicationGroupCacheSecurityGroupNames :: Maybe [Val Text]
  , _elastiCacheReplicationGroupCacheSubnetGroupName :: Maybe (Val Text)
  , _elastiCacheReplicationGroupEngine :: Maybe (Val Text)
  , _elastiCacheReplicationGroupEngineVersion :: Maybe (Val Text)
  , _elastiCacheReplicationGroupNodeGroupConfiguration :: Maybe [ElastiCacheReplicationGroupNodeGroupConfiguration]
  , _elastiCacheReplicationGroupNotificationTopicArn :: Maybe (Val Text)
  , _elastiCacheReplicationGroupNumCacheClusters :: Maybe (Val Integer')
  , _elastiCacheReplicationGroupNumNodeGroups :: Maybe (Val Integer')
  , _elastiCacheReplicationGroupPort :: Maybe (Val Integer')
  , _elastiCacheReplicationGroupPreferredCacheClusterAZs :: Maybe [Val Text]
  , _elastiCacheReplicationGroupPreferredMaintenanceWindow :: Maybe (Val Text)
  , _elastiCacheReplicationGroupPrimaryClusterId :: Maybe (Val Text)
  , _elastiCacheReplicationGroupReplicasPerNodeGroup :: Maybe (Val Integer')
  , _elastiCacheReplicationGroupReplicationGroupDescription :: Val Text
  , _elastiCacheReplicationGroupReplicationGroupId :: Maybe (Val Text)
  , _elastiCacheReplicationGroupSecurityGroupIds :: Maybe [Val Text]
  , _elastiCacheReplicationGroupSnapshotArns :: Maybe [Val Text]
  , _elastiCacheReplicationGroupSnapshotName :: Maybe (Val Text)
  , _elastiCacheReplicationGroupSnapshotRetentionLimit :: Maybe (Val Integer')
  , _elastiCacheReplicationGroupSnapshotWindow :: Maybe (Val Text)
  , _elastiCacheReplicationGroupSnapshottingClusterId :: Maybe (Val Text)
  , _elastiCacheReplicationGroupTags :: Maybe [Tag]
  } deriving (Show, Eq)

instance ToJSON ElastiCacheReplicationGroup where
  toJSON ElastiCacheReplicationGroup{..} =
    object $
    catMaybes
    [ ("AutoMinorVersionUpgrade" .=) <$> _elastiCacheReplicationGroupAutoMinorVersionUpgrade
    , ("AutomaticFailoverEnabled" .=) <$> _elastiCacheReplicationGroupAutomaticFailoverEnabled
    , ("CacheNodeType" .=) <$> _elastiCacheReplicationGroupCacheNodeType
    , ("CacheParameterGroupName" .=) <$> _elastiCacheReplicationGroupCacheParameterGroupName
    , ("CacheSecurityGroupNames" .=) <$> _elastiCacheReplicationGroupCacheSecurityGroupNames
    , ("CacheSubnetGroupName" .=) <$> _elastiCacheReplicationGroupCacheSubnetGroupName
    , ("Engine" .=) <$> _elastiCacheReplicationGroupEngine
    , ("EngineVersion" .=) <$> _elastiCacheReplicationGroupEngineVersion
    , ("NodeGroupConfiguration" .=) <$> _elastiCacheReplicationGroupNodeGroupConfiguration
    , ("NotificationTopicArn" .=) <$> _elastiCacheReplicationGroupNotificationTopicArn
    , ("NumCacheClusters" .=) <$> _elastiCacheReplicationGroupNumCacheClusters
    , ("NumNodeGroups" .=) <$> _elastiCacheReplicationGroupNumNodeGroups
    , ("Port" .=) <$> _elastiCacheReplicationGroupPort
    , ("PreferredCacheClusterAZs" .=) <$> _elastiCacheReplicationGroupPreferredCacheClusterAZs
    , ("PreferredMaintenanceWindow" .=) <$> _elastiCacheReplicationGroupPreferredMaintenanceWindow
    , ("PrimaryClusterId" .=) <$> _elastiCacheReplicationGroupPrimaryClusterId
    , ("ReplicasPerNodeGroup" .=) <$> _elastiCacheReplicationGroupReplicasPerNodeGroup
    , Just ("ReplicationGroupDescription" .= _elastiCacheReplicationGroupReplicationGroupDescription)
    , ("ReplicationGroupId" .=) <$> _elastiCacheReplicationGroupReplicationGroupId
    , ("SecurityGroupIds" .=) <$> _elastiCacheReplicationGroupSecurityGroupIds
    , ("SnapshotArns" .=) <$> _elastiCacheReplicationGroupSnapshotArns
    , ("SnapshotName" .=) <$> _elastiCacheReplicationGroupSnapshotName
    , ("SnapshotRetentionLimit" .=) <$> _elastiCacheReplicationGroupSnapshotRetentionLimit
    , ("SnapshotWindow" .=) <$> _elastiCacheReplicationGroupSnapshotWindow
    , ("SnapshottingClusterId" .=) <$> _elastiCacheReplicationGroupSnapshottingClusterId
    , ("Tags" .=) <$> _elastiCacheReplicationGroupTags
    ]

instance FromJSON ElastiCacheReplicationGroup where
  parseJSON (Object obj) =
    ElastiCacheReplicationGroup <$>
      obj .:? "AutoMinorVersionUpgrade" <*>
      obj .:? "AutomaticFailoverEnabled" <*>
      obj .:? "CacheNodeType" <*>
      obj .:? "CacheParameterGroupName" <*>
      obj .:? "CacheSecurityGroupNames" <*>
      obj .:? "CacheSubnetGroupName" <*>
      obj .:? "Engine" <*>
      obj .:? "EngineVersion" <*>
      obj .:? "NodeGroupConfiguration" <*>
      obj .:? "NotificationTopicArn" <*>
      obj .:? "NumCacheClusters" <*>
      obj .:? "NumNodeGroups" <*>
      obj .:? "Port" <*>
      obj .:? "PreferredCacheClusterAZs" <*>
      obj .:? "PreferredMaintenanceWindow" <*>
      obj .:? "PrimaryClusterId" <*>
      obj .:? "ReplicasPerNodeGroup" <*>
      obj .: "ReplicationGroupDescription" <*>
      obj .:? "ReplicationGroupId" <*>
      obj .:? "SecurityGroupIds" <*>
      obj .:? "SnapshotArns" <*>
      obj .:? "SnapshotName" <*>
      obj .:? "SnapshotRetentionLimit" <*>
      obj .:? "SnapshotWindow" <*>
      obj .:? "SnapshottingClusterId" <*>
      obj .:? "Tags"
  parseJSON _ = mempty

-- | Constructor for 'ElastiCacheReplicationGroup' containing required fields
-- | as arguments.
elastiCacheReplicationGroup
  :: Val Text -- ^ 'ecrgReplicationGroupDescription'
  -> ElastiCacheReplicationGroup
elastiCacheReplicationGroup replicationGroupDescriptionarg =
  ElastiCacheReplicationGroup
  { _elastiCacheReplicationGroupAutoMinorVersionUpgrade = Nothing
  , _elastiCacheReplicationGroupAutomaticFailoverEnabled = Nothing
  , _elastiCacheReplicationGroupCacheNodeType = Nothing
  , _elastiCacheReplicationGroupCacheParameterGroupName = Nothing
  , _elastiCacheReplicationGroupCacheSecurityGroupNames = Nothing
  , _elastiCacheReplicationGroupCacheSubnetGroupName = Nothing
  , _elastiCacheReplicationGroupEngine = Nothing
  , _elastiCacheReplicationGroupEngineVersion = Nothing
  , _elastiCacheReplicationGroupNodeGroupConfiguration = Nothing
  , _elastiCacheReplicationGroupNotificationTopicArn = Nothing
  , _elastiCacheReplicationGroupNumCacheClusters = Nothing
  , _elastiCacheReplicationGroupNumNodeGroups = Nothing
  , _elastiCacheReplicationGroupPort = Nothing
  , _elastiCacheReplicationGroupPreferredCacheClusterAZs = Nothing
  , _elastiCacheReplicationGroupPreferredMaintenanceWindow = Nothing
  , _elastiCacheReplicationGroupPrimaryClusterId = Nothing
  , _elastiCacheReplicationGroupReplicasPerNodeGroup = Nothing
  , _elastiCacheReplicationGroupReplicationGroupDescription = replicationGroupDescriptionarg
  , _elastiCacheReplicationGroupReplicationGroupId = Nothing
  , _elastiCacheReplicationGroupSecurityGroupIds = Nothing
  , _elastiCacheReplicationGroupSnapshotArns = Nothing
  , _elastiCacheReplicationGroupSnapshotName = Nothing
  , _elastiCacheReplicationGroupSnapshotRetentionLimit = Nothing
  , _elastiCacheReplicationGroupSnapshotWindow = Nothing
  , _elastiCacheReplicationGroupSnapshottingClusterId = Nothing
  , _elastiCacheReplicationGroupTags = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-autominorversionupgrade
ecrgAutoMinorVersionUpgrade :: Lens' ElastiCacheReplicationGroup (Maybe (Val Bool'))
ecrgAutoMinorVersionUpgrade = lens _elastiCacheReplicationGroupAutoMinorVersionUpgrade (\s a -> s { _elastiCacheReplicationGroupAutoMinorVersionUpgrade = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-automaticfailoverenabled
ecrgAutomaticFailoverEnabled :: Lens' ElastiCacheReplicationGroup (Maybe (Val Bool'))
ecrgAutomaticFailoverEnabled = lens _elastiCacheReplicationGroupAutomaticFailoverEnabled (\s a -> s { _elastiCacheReplicationGroupAutomaticFailoverEnabled = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cachenodetype
ecrgCacheNodeType :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
ecrgCacheNodeType = lens _elastiCacheReplicationGroupCacheNodeType (\s a -> s { _elastiCacheReplicationGroupCacheNodeType = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cacheparametergroupname
ecrgCacheParameterGroupName :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
ecrgCacheParameterGroupName = lens _elastiCacheReplicationGroupCacheParameterGroupName (\s a -> s { _elastiCacheReplicationGroupCacheParameterGroupName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cachesecuritygroupnames
ecrgCacheSecurityGroupNames :: Lens' ElastiCacheReplicationGroup (Maybe [Val Text])
ecrgCacheSecurityGroupNames = lens _elastiCacheReplicationGroupCacheSecurityGroupNames (\s a -> s { _elastiCacheReplicationGroupCacheSecurityGroupNames = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cachesubnetgroupname
ecrgCacheSubnetGroupName :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
ecrgCacheSubnetGroupName = lens _elastiCacheReplicationGroupCacheSubnetGroupName (\s a -> s { _elastiCacheReplicationGroupCacheSubnetGroupName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-engine
ecrgEngine :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
ecrgEngine = lens _elastiCacheReplicationGroupEngine (\s a -> s { _elastiCacheReplicationGroupEngine = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-engineversion
ecrgEngineVersion :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
ecrgEngineVersion = lens _elastiCacheReplicationGroupEngineVersion (\s a -> s { _elastiCacheReplicationGroupEngineVersion = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-nodegroupconfiguration
ecrgNodeGroupConfiguration :: Lens' ElastiCacheReplicationGroup (Maybe [ElastiCacheReplicationGroupNodeGroupConfiguration])
ecrgNodeGroupConfiguration = lens _elastiCacheReplicationGroupNodeGroupConfiguration (\s a -> s { _elastiCacheReplicationGroupNodeGroupConfiguration = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-notificationtopicarn
ecrgNotificationTopicArn :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
ecrgNotificationTopicArn = lens _elastiCacheReplicationGroupNotificationTopicArn (\s a -> s { _elastiCacheReplicationGroupNotificationTopicArn = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-numcacheclusters
ecrgNumCacheClusters :: Lens' ElastiCacheReplicationGroup (Maybe (Val Integer'))
ecrgNumCacheClusters = lens _elastiCacheReplicationGroupNumCacheClusters (\s a -> s { _elastiCacheReplicationGroupNumCacheClusters = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-numnodegroups
ecrgNumNodeGroups :: Lens' ElastiCacheReplicationGroup (Maybe (Val Integer'))
ecrgNumNodeGroups = lens _elastiCacheReplicationGroupNumNodeGroups (\s a -> s { _elastiCacheReplicationGroupNumNodeGroups = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-port
ecrgPort :: Lens' ElastiCacheReplicationGroup (Maybe (Val Integer'))
ecrgPort = lens _elastiCacheReplicationGroupPort (\s a -> s { _elastiCacheReplicationGroupPort = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-preferredcacheclusterazs
ecrgPreferredCacheClusterAZs :: Lens' ElastiCacheReplicationGroup (Maybe [Val Text])
ecrgPreferredCacheClusterAZs = lens _elastiCacheReplicationGroupPreferredCacheClusterAZs (\s a -> s { _elastiCacheReplicationGroupPreferredCacheClusterAZs = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-preferredmaintenancewindow
ecrgPreferredMaintenanceWindow :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
ecrgPreferredMaintenanceWindow = lens _elastiCacheReplicationGroupPreferredMaintenanceWindow (\s a -> s { _elastiCacheReplicationGroupPreferredMaintenanceWindow = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-primaryclusterid
ecrgPrimaryClusterId :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
ecrgPrimaryClusterId = lens _elastiCacheReplicationGroupPrimaryClusterId (\s a -> s { _elastiCacheReplicationGroupPrimaryClusterId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-replicaspernodegroup
ecrgReplicasPerNodeGroup :: Lens' ElastiCacheReplicationGroup (Maybe (Val Integer'))
ecrgReplicasPerNodeGroup = lens _elastiCacheReplicationGroupReplicasPerNodeGroup (\s a -> s { _elastiCacheReplicationGroupReplicasPerNodeGroup = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-replicationgroupdescription
ecrgReplicationGroupDescription :: Lens' ElastiCacheReplicationGroup (Val Text)
ecrgReplicationGroupDescription = lens _elastiCacheReplicationGroupReplicationGroupDescription (\s a -> s { _elastiCacheReplicationGroupReplicationGroupDescription = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-replicationgroupid
ecrgReplicationGroupId :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
ecrgReplicationGroupId = lens _elastiCacheReplicationGroupReplicationGroupId (\s a -> s { _elastiCacheReplicationGroupReplicationGroupId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-securitygroupids
ecrgSecurityGroupIds :: Lens' ElastiCacheReplicationGroup (Maybe [Val Text])
ecrgSecurityGroupIds = lens _elastiCacheReplicationGroupSecurityGroupIds (\s a -> s { _elastiCacheReplicationGroupSecurityGroupIds = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotarns
ecrgSnapshotArns :: Lens' ElastiCacheReplicationGroup (Maybe [Val Text])
ecrgSnapshotArns = lens _elastiCacheReplicationGroupSnapshotArns (\s a -> s { _elastiCacheReplicationGroupSnapshotArns = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotname
ecrgSnapshotName :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
ecrgSnapshotName = lens _elastiCacheReplicationGroupSnapshotName (\s a -> s { _elastiCacheReplicationGroupSnapshotName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotretentionlimit
ecrgSnapshotRetentionLimit :: Lens' ElastiCacheReplicationGroup (Maybe (Val Integer'))
ecrgSnapshotRetentionLimit = lens _elastiCacheReplicationGroupSnapshotRetentionLimit (\s a -> s { _elastiCacheReplicationGroupSnapshotRetentionLimit = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotwindow
ecrgSnapshotWindow :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
ecrgSnapshotWindow = lens _elastiCacheReplicationGroupSnapshotWindow (\s a -> s { _elastiCacheReplicationGroupSnapshotWindow = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshottingclusterid
ecrgSnapshottingClusterId :: Lens' ElastiCacheReplicationGroup (Maybe (Val Text))
ecrgSnapshottingClusterId = lens _elastiCacheReplicationGroupSnapshottingClusterId (\s a -> s { _elastiCacheReplicationGroupSnapshottingClusterId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-tags
ecrgTags :: Lens' ElastiCacheReplicationGroup (Maybe [Tag])
ecrgTags = lens _elastiCacheReplicationGroupTags (\s a -> s { _elastiCacheReplicationGroupTags = a })