packages feed

stratosphere-0.4.2: library-gen/Stratosphere/Resources/OpsWorksStack.hs

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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html

module Stratosphere.Resources.OpsWorksStack 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.OpsWorksStackChefConfiguration
import Stratosphere.ResourceProperties.OpsWorksStackStackConfigurationManager
import Stratosphere.ResourceProperties.OpsWorksStackSource
import Stratosphere.ResourceProperties.OpsWorksStackElasticIp
import Stratosphere.ResourceProperties.OpsWorksStackRdsDbInstance

-- | Full data type definition for OpsWorksStack. See 'opsWorksStack' for a
-- more convenient constructor.
data OpsWorksStack =
  OpsWorksStack
  { _opsWorksStackAgentVersion :: Maybe (Val Text)
  , _opsWorksStackAttributes :: Maybe Object
  , _opsWorksStackChefConfiguration :: Maybe OpsWorksStackChefConfiguration
  , _opsWorksStackCloneAppIds :: Maybe [Val Text]
  , _opsWorksStackClonePermissions :: Maybe (Val Bool')
  , _opsWorksStackConfigurationManager :: Maybe OpsWorksStackStackConfigurationManager
  , _opsWorksStackCustomCookbooksSource :: Maybe OpsWorksStackSource
  , _opsWorksStackCustomJson :: Maybe Object
  , _opsWorksStackDefaultAvailabilityZone :: Maybe (Val Text)
  , _opsWorksStackDefaultInstanceProfileArn :: Val Text
  , _opsWorksStackDefaultOs :: Maybe (Val Text)
  , _opsWorksStackDefaultRootDeviceType :: Maybe (Val Text)
  , _opsWorksStackDefaultSshKeyName :: Maybe (Val Text)
  , _opsWorksStackDefaultSubnetId :: Maybe (Val Text)
  , _opsWorksStackEcsClusterArn :: Maybe (Val Text)
  , _opsWorksStackElasticIps :: Maybe [OpsWorksStackElasticIp]
  , _opsWorksStackHostnameTheme :: Maybe (Val Text)
  , _opsWorksStackName :: Val Text
  , _opsWorksStackRdsDbInstances :: Maybe [OpsWorksStackRdsDbInstance]
  , _opsWorksStackServiceRoleArn :: Val Text
  , _opsWorksStackSourceStackId :: Maybe (Val Text)
  , _opsWorksStackUseCustomCookbooks :: Maybe (Val Bool')
  , _opsWorksStackUseOpsworksSecurityGroups :: Maybe (Val Bool')
  , _opsWorksStackVpcId :: Maybe (Val Text)
  } deriving (Show, Eq)

instance ToJSON OpsWorksStack where
  toJSON OpsWorksStack{..} =
    object $
    catMaybes
    [ ("AgentVersion" .=) <$> _opsWorksStackAgentVersion
    , ("Attributes" .=) <$> _opsWorksStackAttributes
    , ("ChefConfiguration" .=) <$> _opsWorksStackChefConfiguration
    , ("CloneAppIds" .=) <$> _opsWorksStackCloneAppIds
    , ("ClonePermissions" .=) <$> _opsWorksStackClonePermissions
    , ("ConfigurationManager" .=) <$> _opsWorksStackConfigurationManager
    , ("CustomCookbooksSource" .=) <$> _opsWorksStackCustomCookbooksSource
    , ("CustomJson" .=) <$> _opsWorksStackCustomJson
    , ("DefaultAvailabilityZone" .=) <$> _opsWorksStackDefaultAvailabilityZone
    , Just ("DefaultInstanceProfileArn" .= _opsWorksStackDefaultInstanceProfileArn)
    , ("DefaultOs" .=) <$> _opsWorksStackDefaultOs
    , ("DefaultRootDeviceType" .=) <$> _opsWorksStackDefaultRootDeviceType
    , ("DefaultSshKeyName" .=) <$> _opsWorksStackDefaultSshKeyName
    , ("DefaultSubnetId" .=) <$> _opsWorksStackDefaultSubnetId
    , ("EcsClusterArn" .=) <$> _opsWorksStackEcsClusterArn
    , ("ElasticIps" .=) <$> _opsWorksStackElasticIps
    , ("HostnameTheme" .=) <$> _opsWorksStackHostnameTheme
    , Just ("Name" .= _opsWorksStackName)
    , ("RdsDbInstances" .=) <$> _opsWorksStackRdsDbInstances
    , Just ("ServiceRoleArn" .= _opsWorksStackServiceRoleArn)
    , ("SourceStackId" .=) <$> _opsWorksStackSourceStackId
    , ("UseCustomCookbooks" .=) <$> _opsWorksStackUseCustomCookbooks
    , ("UseOpsworksSecurityGroups" .=) <$> _opsWorksStackUseOpsworksSecurityGroups
    , ("VpcId" .=) <$> _opsWorksStackVpcId
    ]

instance FromJSON OpsWorksStack where
  parseJSON (Object obj) =
    OpsWorksStack <$>
      obj .:? "AgentVersion" <*>
      obj .:? "Attributes" <*>
      obj .:? "ChefConfiguration" <*>
      obj .:? "CloneAppIds" <*>
      obj .:? "ClonePermissions" <*>
      obj .:? "ConfigurationManager" <*>
      obj .:? "CustomCookbooksSource" <*>
      obj .:? "CustomJson" <*>
      obj .:? "DefaultAvailabilityZone" <*>
      obj .: "DefaultInstanceProfileArn" <*>
      obj .:? "DefaultOs" <*>
      obj .:? "DefaultRootDeviceType" <*>
      obj .:? "DefaultSshKeyName" <*>
      obj .:? "DefaultSubnetId" <*>
      obj .:? "EcsClusterArn" <*>
      obj .:? "ElasticIps" <*>
      obj .:? "HostnameTheme" <*>
      obj .: "Name" <*>
      obj .:? "RdsDbInstances" <*>
      obj .: "ServiceRoleArn" <*>
      obj .:? "SourceStackId" <*>
      obj .:? "UseCustomCookbooks" <*>
      obj .:? "UseOpsworksSecurityGroups" <*>
      obj .:? "VpcId"
  parseJSON _ = mempty

-- | Constructor for 'OpsWorksStack' containing required fields as arguments.
opsWorksStack
  :: Val Text -- ^ 'owsDefaultInstanceProfileArn'
  -> Val Text -- ^ 'owsName'
  -> Val Text -- ^ 'owsServiceRoleArn'
  -> OpsWorksStack
opsWorksStack defaultInstanceProfileArnarg namearg serviceRoleArnarg =
  OpsWorksStack
  { _opsWorksStackAgentVersion = Nothing
  , _opsWorksStackAttributes = Nothing
  , _opsWorksStackChefConfiguration = Nothing
  , _opsWorksStackCloneAppIds = Nothing
  , _opsWorksStackClonePermissions = Nothing
  , _opsWorksStackConfigurationManager = Nothing
  , _opsWorksStackCustomCookbooksSource = Nothing
  , _opsWorksStackCustomJson = Nothing
  , _opsWorksStackDefaultAvailabilityZone = Nothing
  , _opsWorksStackDefaultInstanceProfileArn = defaultInstanceProfileArnarg
  , _opsWorksStackDefaultOs = Nothing
  , _opsWorksStackDefaultRootDeviceType = Nothing
  , _opsWorksStackDefaultSshKeyName = Nothing
  , _opsWorksStackDefaultSubnetId = Nothing
  , _opsWorksStackEcsClusterArn = Nothing
  , _opsWorksStackElasticIps = Nothing
  , _opsWorksStackHostnameTheme = Nothing
  , _opsWorksStackName = namearg
  , _opsWorksStackRdsDbInstances = Nothing
  , _opsWorksStackServiceRoleArn = serviceRoleArnarg
  , _opsWorksStackSourceStackId = Nothing
  , _opsWorksStackUseCustomCookbooks = Nothing
  , _opsWorksStackUseOpsworksSecurityGroups = Nothing
  , _opsWorksStackVpcId = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-agentversion
owsAgentVersion :: Lens' OpsWorksStack (Maybe (Val Text))
owsAgentVersion = lens _opsWorksStackAgentVersion (\s a -> s { _opsWorksStackAgentVersion = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-attributes
owsAttributes :: Lens' OpsWorksStack (Maybe Object)
owsAttributes = lens _opsWorksStackAttributes (\s a -> s { _opsWorksStackAttributes = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-chefconfiguration
owsChefConfiguration :: Lens' OpsWorksStack (Maybe OpsWorksStackChefConfiguration)
owsChefConfiguration = lens _opsWorksStackChefConfiguration (\s a -> s { _opsWorksStackChefConfiguration = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-cloneappids
owsCloneAppIds :: Lens' OpsWorksStack (Maybe [Val Text])
owsCloneAppIds = lens _opsWorksStackCloneAppIds (\s a -> s { _opsWorksStackCloneAppIds = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-clonepermissions
owsClonePermissions :: Lens' OpsWorksStack (Maybe (Val Bool'))
owsClonePermissions = lens _opsWorksStackClonePermissions (\s a -> s { _opsWorksStackClonePermissions = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-configmanager
owsConfigurationManager :: Lens' OpsWorksStack (Maybe OpsWorksStackStackConfigurationManager)
owsConfigurationManager = lens _opsWorksStackConfigurationManager (\s a -> s { _opsWorksStackConfigurationManager = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-custcookbooksource
owsCustomCookbooksSource :: Lens' OpsWorksStack (Maybe OpsWorksStackSource)
owsCustomCookbooksSource = lens _opsWorksStackCustomCookbooksSource (\s a -> s { _opsWorksStackCustomCookbooksSource = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-custjson
owsCustomJson :: Lens' OpsWorksStack (Maybe Object)
owsCustomJson = lens _opsWorksStackCustomJson (\s a -> s { _opsWorksStackCustomJson = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-defaultaz
owsDefaultAvailabilityZone :: Lens' OpsWorksStack (Maybe (Val Text))
owsDefaultAvailabilityZone = lens _opsWorksStackDefaultAvailabilityZone (\s a -> s { _opsWorksStackDefaultAvailabilityZone = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-defaultinstanceprof
owsDefaultInstanceProfileArn :: Lens' OpsWorksStack (Val Text)
owsDefaultInstanceProfileArn = lens _opsWorksStackDefaultInstanceProfileArn (\s a -> s { _opsWorksStackDefaultInstanceProfileArn = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-defaultos
owsDefaultOs :: Lens' OpsWorksStack (Maybe (Val Text))
owsDefaultOs = lens _opsWorksStackDefaultOs (\s a -> s { _opsWorksStackDefaultOs = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-defaultrootdevicetype
owsDefaultRootDeviceType :: Lens' OpsWorksStack (Maybe (Val Text))
owsDefaultRootDeviceType = lens _opsWorksStackDefaultRootDeviceType (\s a -> s { _opsWorksStackDefaultRootDeviceType = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-defaultsshkeyname
owsDefaultSshKeyName :: Lens' OpsWorksStack (Maybe (Val Text))
owsDefaultSshKeyName = lens _opsWorksStackDefaultSshKeyName (\s a -> s { _opsWorksStackDefaultSshKeyName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#defaultsubnet
owsDefaultSubnetId :: Lens' OpsWorksStack (Maybe (Val Text))
owsDefaultSubnetId = lens _opsWorksStackDefaultSubnetId (\s a -> s { _opsWorksStackDefaultSubnetId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-ecsclusterarn
owsEcsClusterArn :: Lens' OpsWorksStack (Maybe (Val Text))
owsEcsClusterArn = lens _opsWorksStackEcsClusterArn (\s a -> s { _opsWorksStackEcsClusterArn = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-elasticips
owsElasticIps :: Lens' OpsWorksStack (Maybe [OpsWorksStackElasticIp])
owsElasticIps = lens _opsWorksStackElasticIps (\s a -> s { _opsWorksStackElasticIps = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-hostnametheme
owsHostnameTheme :: Lens' OpsWorksStack (Maybe (Val Text))
owsHostnameTheme = lens _opsWorksStackHostnameTheme (\s a -> s { _opsWorksStackHostnameTheme = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-name
owsName :: Lens' OpsWorksStack (Val Text)
owsName = lens _opsWorksStackName (\s a -> s { _opsWorksStackName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-rdsdbinstances
owsRdsDbInstances :: Lens' OpsWorksStack (Maybe [OpsWorksStackRdsDbInstance])
owsRdsDbInstances = lens _opsWorksStackRdsDbInstances (\s a -> s { _opsWorksStackRdsDbInstances = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-servicerolearn
owsServiceRoleArn :: Lens' OpsWorksStack (Val Text)
owsServiceRoleArn = lens _opsWorksStackServiceRoleArn (\s a -> s { _opsWorksStackServiceRoleArn = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-sourcestackid
owsSourceStackId :: Lens' OpsWorksStack (Maybe (Val Text))
owsSourceStackId = lens _opsWorksStackSourceStackId (\s a -> s { _opsWorksStackSourceStackId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#usecustcookbooks
owsUseCustomCookbooks :: Lens' OpsWorksStack (Maybe (Val Bool'))
owsUseCustomCookbooks = lens _opsWorksStackUseCustomCookbooks (\s a -> s { _opsWorksStackUseCustomCookbooks = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-useopsworkssecuritygroups
owsUseOpsworksSecurityGroups :: Lens' OpsWorksStack (Maybe (Val Bool'))
owsUseOpsworksSecurityGroups = lens _opsWorksStackUseOpsworksSecurityGroups (\s a -> s { _opsWorksStackUseOpsworksSecurityGroups = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworks-stack.html#cfn-opsworks-stack-vpcid
owsVpcId :: Lens' OpsWorksStack (Maybe (Val Text))
owsVpcId = lens _opsWorksStackVpcId (\s a -> s { _opsWorksStackVpcId = a })