packages feed

stratosphere-0.4.2: library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchSpecifications.hs

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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html

module Stratosphere.ResourceProperties.EC2SpotFleetLaunchSpecifications 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.EC2SpotFleetBlockDeviceMappings
import Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfile
import Stratosphere.ResourceProperties.EC2SpotFleetMonitoring
import Stratosphere.ResourceProperties.EC2SpotFleetNetworkInterfaces
import Stratosphere.ResourceProperties.EC2SpotFleetPlacement
import Stratosphere.ResourceProperties.EC2SpotFleetSecurityGroups

-- | Full data type definition for EC2SpotFleetLaunchSpecifications. See
-- 'ec2SpotFleetLaunchSpecifications' for a more convenient constructor.
data EC2SpotFleetLaunchSpecifications =
  EC2SpotFleetLaunchSpecifications
  { _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings :: Maybe [EC2SpotFleetBlockDeviceMappings]
  , _eC2SpotFleetLaunchSpecificationsEbsOptimized :: Maybe (Val Bool')
  , _eC2SpotFleetLaunchSpecificationsIamInstanceProfile :: Maybe EC2SpotFleetIamInstanceProfile
  , _eC2SpotFleetLaunchSpecificationsImageId :: Val Text
  , _eC2SpotFleetLaunchSpecificationsInstanceType :: Val Text
  , _eC2SpotFleetLaunchSpecificationsKernelId :: Maybe (Val Text)
  , _eC2SpotFleetLaunchSpecificationsKeyName :: Maybe (Val Text)
  , _eC2SpotFleetLaunchSpecificationsMonitoring :: Maybe EC2SpotFleetMonitoring
  , _eC2SpotFleetLaunchSpecificationsNetworkInterfaces :: Maybe [EC2SpotFleetNetworkInterfaces]
  , _eC2SpotFleetLaunchSpecificationsPlacement :: Maybe EC2SpotFleetPlacement
  , _eC2SpotFleetLaunchSpecificationsRamdiskId :: Maybe (Val Text)
  , _eC2SpotFleetLaunchSpecificationsSecurityGroups :: Maybe [EC2SpotFleetSecurityGroups]
  , _eC2SpotFleetLaunchSpecificationsSpotPrice :: Maybe (Val Text)
  , _eC2SpotFleetLaunchSpecificationsSubnetId :: Maybe (Val Text)
  , _eC2SpotFleetLaunchSpecificationsUserData :: Maybe (Val Text)
  , _eC2SpotFleetLaunchSpecificationsWeightedCapacity :: Maybe (Val Double')
  } deriving (Show, Eq)

instance ToJSON EC2SpotFleetLaunchSpecifications where
  toJSON EC2SpotFleetLaunchSpecifications{..} =
    object $
    catMaybes
    [ ("BlockDeviceMappings" .=) <$> _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings
    , ("EbsOptimized" .=) <$> _eC2SpotFleetLaunchSpecificationsEbsOptimized
    , ("IamInstanceProfile" .=) <$> _eC2SpotFleetLaunchSpecificationsIamInstanceProfile
    , Just ("ImageId" .= _eC2SpotFleetLaunchSpecificationsImageId)
    , Just ("InstanceType" .= _eC2SpotFleetLaunchSpecificationsInstanceType)
    , ("KernelId" .=) <$> _eC2SpotFleetLaunchSpecificationsKernelId
    , ("KeyName" .=) <$> _eC2SpotFleetLaunchSpecificationsKeyName
    , ("Monitoring" .=) <$> _eC2SpotFleetLaunchSpecificationsMonitoring
    , ("NetworkInterfaces" .=) <$> _eC2SpotFleetLaunchSpecificationsNetworkInterfaces
    , ("Placement" .=) <$> _eC2SpotFleetLaunchSpecificationsPlacement
    , ("RamdiskId" .=) <$> _eC2SpotFleetLaunchSpecificationsRamdiskId
    , ("SecurityGroups" .=) <$> _eC2SpotFleetLaunchSpecificationsSecurityGroups
    , ("SpotPrice" .=) <$> _eC2SpotFleetLaunchSpecificationsSpotPrice
    , ("SubnetId" .=) <$> _eC2SpotFleetLaunchSpecificationsSubnetId
    , ("UserData" .=) <$> _eC2SpotFleetLaunchSpecificationsUserData
    , ("WeightedCapacity" .=) <$> _eC2SpotFleetLaunchSpecificationsWeightedCapacity
    ]

instance FromJSON EC2SpotFleetLaunchSpecifications where
  parseJSON (Object obj) =
    EC2SpotFleetLaunchSpecifications <$>
      obj .:? "BlockDeviceMappings" <*>
      obj .:? "EbsOptimized" <*>
      obj .:? "IamInstanceProfile" <*>
      obj .: "ImageId" <*>
      obj .: "InstanceType" <*>
      obj .:? "KernelId" <*>
      obj .:? "KeyName" <*>
      obj .:? "Monitoring" <*>
      obj .:? "NetworkInterfaces" <*>
      obj .:? "Placement" <*>
      obj .:? "RamdiskId" <*>
      obj .:? "SecurityGroups" <*>
      obj .:? "SpotPrice" <*>
      obj .:? "SubnetId" <*>
      obj .:? "UserData" <*>
      obj .:? "WeightedCapacity"
  parseJSON _ = mempty

-- | Constructor for 'EC2SpotFleetLaunchSpecifications' containing required
-- fields as arguments.
ec2SpotFleetLaunchSpecifications
  :: Val Text -- ^ 'ecsflsImageId'
  -> Val Text -- ^ 'ecsflsInstanceType'
  -> EC2SpotFleetLaunchSpecifications
ec2SpotFleetLaunchSpecifications imageIdarg instanceTypearg =
  EC2SpotFleetLaunchSpecifications
  { _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings = Nothing
  , _eC2SpotFleetLaunchSpecificationsEbsOptimized = Nothing
  , _eC2SpotFleetLaunchSpecificationsIamInstanceProfile = Nothing
  , _eC2SpotFleetLaunchSpecificationsImageId = imageIdarg
  , _eC2SpotFleetLaunchSpecificationsInstanceType = instanceTypearg
  , _eC2SpotFleetLaunchSpecificationsKernelId = Nothing
  , _eC2SpotFleetLaunchSpecificationsKeyName = Nothing
  , _eC2SpotFleetLaunchSpecificationsMonitoring = Nothing
  , _eC2SpotFleetLaunchSpecificationsNetworkInterfaces = Nothing
  , _eC2SpotFleetLaunchSpecificationsPlacement = Nothing
  , _eC2SpotFleetLaunchSpecificationsRamdiskId = Nothing
  , _eC2SpotFleetLaunchSpecificationsSecurityGroups = Nothing
  , _eC2SpotFleetLaunchSpecificationsSpotPrice = Nothing
  , _eC2SpotFleetLaunchSpecificationsSubnetId = Nothing
  , _eC2SpotFleetLaunchSpecificationsUserData = Nothing
  , _eC2SpotFleetLaunchSpecificationsWeightedCapacity = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-blockdevicemappings
ecsflsBlockDeviceMappings :: Lens' EC2SpotFleetLaunchSpecifications (Maybe [EC2SpotFleetBlockDeviceMappings])
ecsflsBlockDeviceMappings = lens _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings (\s a -> s { _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-ebsoptimized
ecsflsEbsOptimized :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Bool'))
ecsflsEbsOptimized = lens _eC2SpotFleetLaunchSpecificationsEbsOptimized (\s a -> s { _eC2SpotFleetLaunchSpecificationsEbsOptimized = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-iaminstanceprofile
ecsflsIamInstanceProfile :: Lens' EC2SpotFleetLaunchSpecifications (Maybe EC2SpotFleetIamInstanceProfile)
ecsflsIamInstanceProfile = lens _eC2SpotFleetLaunchSpecificationsIamInstanceProfile (\s a -> s { _eC2SpotFleetLaunchSpecificationsIamInstanceProfile = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-imageid
ecsflsImageId :: Lens' EC2SpotFleetLaunchSpecifications (Val Text)
ecsflsImageId = lens _eC2SpotFleetLaunchSpecificationsImageId (\s a -> s { _eC2SpotFleetLaunchSpecificationsImageId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-instancetype
ecsflsInstanceType :: Lens' EC2SpotFleetLaunchSpecifications (Val Text)
ecsflsInstanceType = lens _eC2SpotFleetLaunchSpecificationsInstanceType (\s a -> s { _eC2SpotFleetLaunchSpecificationsInstanceType = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-kernelid
ecsflsKernelId :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
ecsflsKernelId = lens _eC2SpotFleetLaunchSpecificationsKernelId (\s a -> s { _eC2SpotFleetLaunchSpecificationsKernelId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-keyname
ecsflsKeyName :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
ecsflsKeyName = lens _eC2SpotFleetLaunchSpecificationsKeyName (\s a -> s { _eC2SpotFleetLaunchSpecificationsKeyName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-monitoring
ecsflsMonitoring :: Lens' EC2SpotFleetLaunchSpecifications (Maybe EC2SpotFleetMonitoring)
ecsflsMonitoring = lens _eC2SpotFleetLaunchSpecificationsMonitoring (\s a -> s { _eC2SpotFleetLaunchSpecificationsMonitoring = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-networkinterfaces
ecsflsNetworkInterfaces :: Lens' EC2SpotFleetLaunchSpecifications (Maybe [EC2SpotFleetNetworkInterfaces])
ecsflsNetworkInterfaces = lens _eC2SpotFleetLaunchSpecificationsNetworkInterfaces (\s a -> s { _eC2SpotFleetLaunchSpecificationsNetworkInterfaces = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-placement
ecsflsPlacement :: Lens' EC2SpotFleetLaunchSpecifications (Maybe EC2SpotFleetPlacement)
ecsflsPlacement = lens _eC2SpotFleetLaunchSpecificationsPlacement (\s a -> s { _eC2SpotFleetLaunchSpecificationsPlacement = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-ramdiskid
ecsflsRamdiskId :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
ecsflsRamdiskId = lens _eC2SpotFleetLaunchSpecificationsRamdiskId (\s a -> s { _eC2SpotFleetLaunchSpecificationsRamdiskId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-securitygroups
ecsflsSecurityGroups :: Lens' EC2SpotFleetLaunchSpecifications (Maybe [EC2SpotFleetSecurityGroups])
ecsflsSecurityGroups = lens _eC2SpotFleetLaunchSpecificationsSecurityGroups (\s a -> s { _eC2SpotFleetLaunchSpecificationsSecurityGroups = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-spotprice
ecsflsSpotPrice :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
ecsflsSpotPrice = lens _eC2SpotFleetLaunchSpecificationsSpotPrice (\s a -> s { _eC2SpotFleetLaunchSpecificationsSpotPrice = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-subnetid
ecsflsSubnetId :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
ecsflsSubnetId = lens _eC2SpotFleetLaunchSpecificationsSubnetId (\s a -> s { _eC2SpotFleetLaunchSpecificationsSubnetId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-userdata
ecsflsUserData :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
ecsflsUserData = lens _eC2SpotFleetLaunchSpecificationsUserData (\s a -> s { _eC2SpotFleetLaunchSpecificationsUserData = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-weightedcapacity
ecsflsWeightedCapacity :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Double'))
ecsflsWeightedCapacity = lens _eC2SpotFleetLaunchSpecificationsWeightedCapacity (\s a -> s { _eC2SpotFleetLaunchSpecificationsWeightedCapacity = a })