packages feed

stratosphere-0.4.4: library-gen/Stratosphere/Resources/AutoScalingAutoScalingGroup.hs

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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html

module Stratosphere.Resources.AutoScalingAutoScalingGroup 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.AutoScalingAutoScalingGroupMetricsCollection
import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfiguration
import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupTagProperty

-- | Full data type definition for AutoScalingAutoScalingGroup. See
-- 'autoScalingAutoScalingGroup' for a more convenient constructor.
data AutoScalingAutoScalingGroup =
  AutoScalingAutoScalingGroup
  { _autoScalingAutoScalingGroupAvailabilityZones :: Maybe [Val Text]
  , _autoScalingAutoScalingGroupCooldown :: Maybe (Val Text)
  , _autoScalingAutoScalingGroupDesiredCapacity :: Maybe (Val Text)
  , _autoScalingAutoScalingGroupHealthCheckGracePeriod :: Maybe (Val Integer')
  , _autoScalingAutoScalingGroupHealthCheckType :: Maybe (Val Text)
  , _autoScalingAutoScalingGroupInstanceId :: Maybe (Val Text)
  , _autoScalingAutoScalingGroupLaunchConfigurationName :: Maybe (Val Text)
  , _autoScalingAutoScalingGroupLoadBalancerNames :: Maybe [Val Text]
  , _autoScalingAutoScalingGroupMaxSize :: Val Text
  , _autoScalingAutoScalingGroupMetricsCollection :: Maybe [AutoScalingAutoScalingGroupMetricsCollection]
  , _autoScalingAutoScalingGroupMinSize :: Val Text
  , _autoScalingAutoScalingGroupNotificationConfigurations :: Maybe [AutoScalingAutoScalingGroupNotificationConfiguration]
  , _autoScalingAutoScalingGroupPlacementGroup :: Maybe (Val Text)
  , _autoScalingAutoScalingGroupTags :: Maybe [AutoScalingAutoScalingGroupTagProperty]
  , _autoScalingAutoScalingGroupTargetGroupARNs :: Maybe [Val Text]
  , _autoScalingAutoScalingGroupTerminationPolicies :: Maybe [Val Text]
  , _autoScalingAutoScalingGroupVPCZoneIdentifier :: Maybe [Val Text]
  } deriving (Show, Eq)

instance ToJSON AutoScalingAutoScalingGroup where
  toJSON AutoScalingAutoScalingGroup{..} =
    object $
    catMaybes
    [ ("AvailabilityZones" .=) <$> _autoScalingAutoScalingGroupAvailabilityZones
    , ("Cooldown" .=) <$> _autoScalingAutoScalingGroupCooldown
    , ("DesiredCapacity" .=) <$> _autoScalingAutoScalingGroupDesiredCapacity
    , ("HealthCheckGracePeriod" .=) <$> _autoScalingAutoScalingGroupHealthCheckGracePeriod
    , ("HealthCheckType" .=) <$> _autoScalingAutoScalingGroupHealthCheckType
    , ("InstanceId" .=) <$> _autoScalingAutoScalingGroupInstanceId
    , ("LaunchConfigurationName" .=) <$> _autoScalingAutoScalingGroupLaunchConfigurationName
    , ("LoadBalancerNames" .=) <$> _autoScalingAutoScalingGroupLoadBalancerNames
    , Just ("MaxSize" .= _autoScalingAutoScalingGroupMaxSize)
    , ("MetricsCollection" .=) <$> _autoScalingAutoScalingGroupMetricsCollection
    , Just ("MinSize" .= _autoScalingAutoScalingGroupMinSize)
    , ("NotificationConfigurations" .=) <$> _autoScalingAutoScalingGroupNotificationConfigurations
    , ("PlacementGroup" .=) <$> _autoScalingAutoScalingGroupPlacementGroup
    , ("Tags" .=) <$> _autoScalingAutoScalingGroupTags
    , ("TargetGroupARNs" .=) <$> _autoScalingAutoScalingGroupTargetGroupARNs
    , ("TerminationPolicies" .=) <$> _autoScalingAutoScalingGroupTerminationPolicies
    , ("VPCZoneIdentifier" .=) <$> _autoScalingAutoScalingGroupVPCZoneIdentifier
    ]

instance FromJSON AutoScalingAutoScalingGroup where
  parseJSON (Object obj) =
    AutoScalingAutoScalingGroup <$>
      obj .:? "AvailabilityZones" <*>
      obj .:? "Cooldown" <*>
      obj .:? "DesiredCapacity" <*>
      obj .:? "HealthCheckGracePeriod" <*>
      obj .:? "HealthCheckType" <*>
      obj .:? "InstanceId" <*>
      obj .:? "LaunchConfigurationName" <*>
      obj .:? "LoadBalancerNames" <*>
      obj .: "MaxSize" <*>
      obj .:? "MetricsCollection" <*>
      obj .: "MinSize" <*>
      obj .:? "NotificationConfigurations" <*>
      obj .:? "PlacementGroup" <*>
      obj .:? "Tags" <*>
      obj .:? "TargetGroupARNs" <*>
      obj .:? "TerminationPolicies" <*>
      obj .:? "VPCZoneIdentifier"
  parseJSON _ = mempty

-- | Constructor for 'AutoScalingAutoScalingGroup' containing required fields
-- as arguments.
autoScalingAutoScalingGroup
  :: Val Text -- ^ 'asasgMaxSize'
  -> Val Text -- ^ 'asasgMinSize'
  -> AutoScalingAutoScalingGroup
autoScalingAutoScalingGroup maxSizearg minSizearg =
  AutoScalingAutoScalingGroup
  { _autoScalingAutoScalingGroupAvailabilityZones = Nothing
  , _autoScalingAutoScalingGroupCooldown = Nothing
  , _autoScalingAutoScalingGroupDesiredCapacity = Nothing
  , _autoScalingAutoScalingGroupHealthCheckGracePeriod = Nothing
  , _autoScalingAutoScalingGroupHealthCheckType = Nothing
  , _autoScalingAutoScalingGroupInstanceId = Nothing
  , _autoScalingAutoScalingGroupLaunchConfigurationName = Nothing
  , _autoScalingAutoScalingGroupLoadBalancerNames = Nothing
  , _autoScalingAutoScalingGroupMaxSize = maxSizearg
  , _autoScalingAutoScalingGroupMetricsCollection = Nothing
  , _autoScalingAutoScalingGroupMinSize = minSizearg
  , _autoScalingAutoScalingGroupNotificationConfigurations = Nothing
  , _autoScalingAutoScalingGroupPlacementGroup = Nothing
  , _autoScalingAutoScalingGroupTags = Nothing
  , _autoScalingAutoScalingGroupTargetGroupARNs = Nothing
  , _autoScalingAutoScalingGroupTerminationPolicies = Nothing
  , _autoScalingAutoScalingGroupVPCZoneIdentifier = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-availabilityzones
asasgAvailabilityZones :: Lens' AutoScalingAutoScalingGroup (Maybe [Val Text])
asasgAvailabilityZones = lens _autoScalingAutoScalingGroupAvailabilityZones (\s a -> s { _autoScalingAutoScalingGroupAvailabilityZones = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-cooldown
asasgCooldown :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Text))
asasgCooldown = lens _autoScalingAutoScalingGroupCooldown (\s a -> s { _autoScalingAutoScalingGroupCooldown = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-desiredcapacity
asasgDesiredCapacity :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Text))
asasgDesiredCapacity = lens _autoScalingAutoScalingGroupDesiredCapacity (\s a -> s { _autoScalingAutoScalingGroupDesiredCapacity = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-healthcheckgraceperiod
asasgHealthCheckGracePeriod :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Integer'))
asasgHealthCheckGracePeriod = lens _autoScalingAutoScalingGroupHealthCheckGracePeriod (\s a -> s { _autoScalingAutoScalingGroupHealthCheckGracePeriod = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-healthchecktype
asasgHealthCheckType :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Text))
asasgHealthCheckType = lens _autoScalingAutoScalingGroupHealthCheckType (\s a -> s { _autoScalingAutoScalingGroupHealthCheckType = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-instanceid
asasgInstanceId :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Text))
asasgInstanceId = lens _autoScalingAutoScalingGroupInstanceId (\s a -> s { _autoScalingAutoScalingGroupInstanceId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-launchconfigurationname
asasgLaunchConfigurationName :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Text))
asasgLaunchConfigurationName = lens _autoScalingAutoScalingGroupLaunchConfigurationName (\s a -> s { _autoScalingAutoScalingGroupLaunchConfigurationName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-loadbalancernames
asasgLoadBalancerNames :: Lens' AutoScalingAutoScalingGroup (Maybe [Val Text])
asasgLoadBalancerNames = lens _autoScalingAutoScalingGroupLoadBalancerNames (\s a -> s { _autoScalingAutoScalingGroupLoadBalancerNames = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-maxsize
asasgMaxSize :: Lens' AutoScalingAutoScalingGroup (Val Text)
asasgMaxSize = lens _autoScalingAutoScalingGroupMaxSize (\s a -> s { _autoScalingAutoScalingGroupMaxSize = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-metricscollection
asasgMetricsCollection :: Lens' AutoScalingAutoScalingGroup (Maybe [AutoScalingAutoScalingGroupMetricsCollection])
asasgMetricsCollection = lens _autoScalingAutoScalingGroupMetricsCollection (\s a -> s { _autoScalingAutoScalingGroupMetricsCollection = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-minsize
asasgMinSize :: Lens' AutoScalingAutoScalingGroup (Val Text)
asasgMinSize = lens _autoScalingAutoScalingGroupMinSize (\s a -> s { _autoScalingAutoScalingGroupMinSize = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-notificationconfigurations
asasgNotificationConfigurations :: Lens' AutoScalingAutoScalingGroup (Maybe [AutoScalingAutoScalingGroupNotificationConfiguration])
asasgNotificationConfigurations = lens _autoScalingAutoScalingGroupNotificationConfigurations (\s a -> s { _autoScalingAutoScalingGroupNotificationConfigurations = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-placementgroup
asasgPlacementGroup :: Lens' AutoScalingAutoScalingGroup (Maybe (Val Text))
asasgPlacementGroup = lens _autoScalingAutoScalingGroupPlacementGroup (\s a -> s { _autoScalingAutoScalingGroupPlacementGroup = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-tags
asasgTags :: Lens' AutoScalingAutoScalingGroup (Maybe [AutoScalingAutoScalingGroupTagProperty])
asasgTags = lens _autoScalingAutoScalingGroupTags (\s a -> s { _autoScalingAutoScalingGroupTags = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-targetgrouparns
asasgTargetGroupARNs :: Lens' AutoScalingAutoScalingGroup (Maybe [Val Text])
asasgTargetGroupARNs = lens _autoScalingAutoScalingGroupTargetGroupARNs (\s a -> s { _autoScalingAutoScalingGroupTargetGroupARNs = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-termpolicy
asasgTerminationPolicies :: Lens' AutoScalingAutoScalingGroup (Maybe [Val Text])
asasgTerminationPolicies = lens _autoScalingAutoScalingGroupTerminationPolicies (\s a -> s { _autoScalingAutoScalingGroupTerminationPolicies = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-vpczoneidentifier
asasgVPCZoneIdentifier :: Lens' AutoScalingAutoScalingGroup (Maybe [Val Text])
asasgVPCZoneIdentifier = lens _autoScalingAutoScalingGroupVPCZoneIdentifier (\s a -> s { _autoScalingAutoScalingGroupVPCZoneIdentifier = a })