packages feed

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

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

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

module Stratosphere.Resources.OpsWorksStack where

import Stratosphere.ResourceImports
import Stratosphere.ResourceProperties.OpsWorksStackChefConfiguration
import Stratosphere.ResourceProperties.OpsWorksStackStackConfigurationManager
import Stratosphere.ResourceProperties.OpsWorksStackSource
import Stratosphere.ResourceProperties.OpsWorksStackElasticIp
import Stratosphere.ResourceProperties.OpsWorksStackRdsDbInstance
import Stratosphere.ResourceProperties.Tag

-- | 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 (ValList 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)
  , _opsWorksStackTags :: Maybe [Tag]
  , _opsWorksStackUseCustomCookbooks :: Maybe (Val Bool)
  , _opsWorksStackUseOpsworksSecurityGroups :: Maybe (Val Bool)
  , _opsWorksStackVpcId :: Maybe (Val Text)
  } deriving (Show, Eq)

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

instance FromJSON OpsWorksStack where
  parseJSON (Object obj) =
    OpsWorksStack <$>
      (obj .:? "AgentVersion") <*>
      (obj .:? "Attributes") <*>
      (obj .:? "ChefConfiguration") <*>
      (obj .:? "CloneAppIds") <*>
      fmap (fmap (fmap unBool')) (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 .:? "Tags") <*>
      fmap (fmap (fmap unBool')) (obj .:? "UseCustomCookbooks") <*>
      fmap (fmap (fmap unBool')) (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
  , _opsWorksStackTags = 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 (ValList 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#cfn-opsworks-stack-tags
owsTags :: Lens' OpsWorksStack (Maybe [Tag])
owsTags = lens _opsWorksStackTags (\s a -> s { _opsWorksStackTags = 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 })