{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-binds #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Network.AWS.OpsWorks.CreateStack -- Copyright : (c) 2013-2016 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- Creates a new stack. For more information, see -- . -- -- __Required Permissions__: To use this action, an IAM user must have an -- attached policy that explicitly grants permissions. For more information -- on user permissions, see -- . module Network.AWS.OpsWorks.CreateStack ( -- * Creating a Request createStack , CreateStack -- * Request Lenses , csDefaultRootDeviceType , csVPCId , csChefConfiguration , csAgentVersion , csDefaultSSHKeyName , csCustomJSON , csCustomCookbooksSource , csDefaultAvailabilityZone , csAttributes , csDefaultOS , csUseOpsworksSecurityGroups , csUseCustomCookbooks , csDefaultSubnetId , csConfigurationManager , csHostnameTheme , csName , csRegion , csServiceRoleARN , csDefaultInstanceProfileARN -- * Destructuring the Response , createStackResponse , CreateStackResponse -- * Response Lenses , crsStackId , crsResponseStatus ) where import Network.AWS.Lens import Network.AWS.OpsWorks.Types import Network.AWS.OpsWorks.Types.Product import Network.AWS.Prelude import Network.AWS.Request import Network.AWS.Response -- | /See:/ 'createStack' smart constructor. data CreateStack = CreateStack' { _csDefaultRootDeviceType :: !(Maybe RootDeviceType) , _csVPCId :: !(Maybe Text) , _csChefConfiguration :: !(Maybe ChefConfiguration) , _csAgentVersion :: !(Maybe Text) , _csDefaultSSHKeyName :: !(Maybe Text) , _csCustomJSON :: !(Maybe Text) , _csCustomCookbooksSource :: !(Maybe Source) , _csDefaultAvailabilityZone :: !(Maybe Text) , _csAttributes :: !(Maybe (Map StackAttributesKeys Text)) , _csDefaultOS :: !(Maybe Text) , _csUseOpsworksSecurityGroups :: !(Maybe Bool) , _csUseCustomCookbooks :: !(Maybe Bool) , _csDefaultSubnetId :: !(Maybe Text) , _csConfigurationManager :: !(Maybe StackConfigurationManager) , _csHostnameTheme :: !(Maybe Text) , _csName :: !Text , _csRegion :: !Text , _csServiceRoleARN :: !Text , _csDefaultInstanceProfileARN :: !Text } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'CreateStack' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'csDefaultRootDeviceType' -- -- * 'csVPCId' -- -- * 'csChefConfiguration' -- -- * 'csAgentVersion' -- -- * 'csDefaultSSHKeyName' -- -- * 'csCustomJSON' -- -- * 'csCustomCookbooksSource' -- -- * 'csDefaultAvailabilityZone' -- -- * 'csAttributes' -- -- * 'csDefaultOS' -- -- * 'csUseOpsworksSecurityGroups' -- -- * 'csUseCustomCookbooks' -- -- * 'csDefaultSubnetId' -- -- * 'csConfigurationManager' -- -- * 'csHostnameTheme' -- -- * 'csName' -- -- * 'csRegion' -- -- * 'csServiceRoleARN' -- -- * 'csDefaultInstanceProfileARN' createStack :: Text -- ^ 'csName' -> Text -- ^ 'csRegion' -> Text -- ^ 'csServiceRoleARN' -> Text -- ^ 'csDefaultInstanceProfileARN' -> CreateStack createStack pName_ pRegion_ pServiceRoleARN_ pDefaultInstanceProfileARN_ = CreateStack' { _csDefaultRootDeviceType = Nothing , _csVPCId = Nothing , _csChefConfiguration = Nothing , _csAgentVersion = Nothing , _csDefaultSSHKeyName = Nothing , _csCustomJSON = Nothing , _csCustomCookbooksSource = Nothing , _csDefaultAvailabilityZone = Nothing , _csAttributes = Nothing , _csDefaultOS = Nothing , _csUseOpsworksSecurityGroups = Nothing , _csUseCustomCookbooks = Nothing , _csDefaultSubnetId = Nothing , _csConfigurationManager = Nothing , _csHostnameTheme = Nothing , _csName = pName_ , _csRegion = pRegion_ , _csServiceRoleARN = pServiceRoleARN_ , _csDefaultInstanceProfileARN = pDefaultInstanceProfileARN_ } -- | The default root device type. This value is the default for all -- instances in the stack, but you can override it when you create an -- instance. The default option is 'instance-store'. For more information, -- see -- . csDefaultRootDeviceType :: Lens' CreateStack (Maybe RootDeviceType) csDefaultRootDeviceType = lens _csDefaultRootDeviceType (\ s a -> s{_csDefaultRootDeviceType = a}); -- | The ID of the VPC that the stack is to be launched into. The VPC must be -- in the stack\'s region. All instances are launched into this VPC. You -- cannot change the ID later. -- -- - If your account supports EC2-Classic, the default value is 'no VPC'. -- - If your account does not support EC2-Classic, the default value is -- the default VPC for the specified region. -- -- If the VPC ID corresponds to a default VPC and you have specified either -- the 'DefaultAvailabilityZone' or the 'DefaultSubnetId' parameter only, -- AWS OpsWorks infers the value of the other parameter. If you specify -- neither parameter, AWS OpsWorks sets these parameters to the first valid -- Availability Zone for the specified region and the corresponding default -- VPC subnet ID, respectively. -- -- If you specify a nondefault VPC ID, note the following: -- -- - It must belong to a VPC in your account that is in the specified -- region. -- - You must specify a value for 'DefaultSubnetId'. -- -- For more information on how to use AWS OpsWorks with a VPC, see -- . -- For more information on default VPC and EC2-Classic, see -- . csVPCId :: Lens' CreateStack (Maybe Text) csVPCId = lens _csVPCId (\ s a -> s{_csVPCId = a}); -- | A 'ChefConfiguration' object that specifies whether to enable Berkshelf -- and the Berkshelf version on Chef 11.10 stacks. For more information, -- see -- . csChefConfiguration :: Lens' CreateStack (Maybe ChefConfiguration) csChefConfiguration = lens _csChefConfiguration (\ s a -> s{_csChefConfiguration = a}); -- | The default AWS OpsWorks agent version. You have the following options: -- -- - Auto-update - Set this parameter to 'LATEST'. AWS OpsWorks -- automatically installs new agent versions on the stack\'s instances -- as soon as they are available. -- - Fixed version - Set this parameter to your preferred agent version. -- To update the agent version, you must edit the stack configuration -- and specify a new version. AWS OpsWorks then automatically installs -- that version on the stack\'s instances. -- -- The default setting is the most recent release of the agent. To specify -- an agent version, you must use the complete version number, not the -- abbreviated number shown on the console. For a list of available agent -- version numbers, call < DescribeAgentVersions>. -- -- You can also specify an agent version when you create or update an -- instance, which overrides the stack\'s default setting. csAgentVersion :: Lens' CreateStack (Maybe Text) csAgentVersion = lens _csAgentVersion (\ s a -> s{_csAgentVersion = a}); -- | A default Amazon EC2 key pair name. The default value is none. If you -- specify a key pair name, AWS OpsWorks installs the public key on the -- instance and you can use the private key with an SSH client to log in to -- the instance. For more information, see -- -- and -- . -- You can override this setting by specifying a different key pair, or no -- key pair, when you -- . csDefaultSSHKeyName :: Lens' CreateStack (Maybe Text) csDefaultSSHKeyName = lens _csDefaultSSHKeyName (\ s a -> s{_csDefaultSSHKeyName = a}); -- | A string that contains user-defined, custom JSON. It can be used to -- override the corresponding default stack configuration attribute values -- or to pass data to recipes. The string should be in the following escape -- characters such as \'\"\': -- -- '\"{\\\"key1\\\": \\\"value1\\\", \\\"key2\\\": \\\"value2\\\",...}\"' -- -- For more information on custom JSON, see -- . csCustomJSON :: Lens' CreateStack (Maybe Text) csCustomJSON = lens _csCustomJSON (\ s a -> s{_csCustomJSON = a}); -- | Undocumented member. csCustomCookbooksSource :: Lens' CreateStack (Maybe Source) csCustomCookbooksSource = lens _csCustomCookbooksSource (\ s a -> s{_csCustomCookbooksSource = a}); -- | The stack\'s default Availability Zone, which must be in the specified -- region. For more information, see -- . -- If you also specify a value for 'DefaultSubnetId', the subnet must be in -- the same zone. For more information, see the 'VpcId' parameter -- description. csDefaultAvailabilityZone :: Lens' CreateStack (Maybe Text) csDefaultAvailabilityZone = lens _csDefaultAvailabilityZone (\ s a -> s{_csDefaultAvailabilityZone = a}); -- | One or more user-defined key-value pairs to be added to the stack -- attributes. csAttributes :: Lens' CreateStack (HashMap StackAttributesKeys Text) csAttributes = lens _csAttributes (\ s a -> s{_csAttributes = a}) . _Default . _Map; -- | The stack\'s default operating system, which is installed on every -- instance unless you specify a different operating system when you create -- the instance. You can specify one of the following. -- -- - A supported Linux operating system: An Amazon Linux version, such as -- 'Amazon Linux 2015.03', 'Red Hat Enterprise Linux 7', -- 'Ubuntu 12.04 LTS', or 'Ubuntu 14.04 LTS'. -- - 'Microsoft Windows Server 2012 R2 Base'. -- - A custom AMI: 'Custom'. You specify the custom AMI you want to use -- when you create instances. For more information, see -- . -- -- The default option is the current Amazon Linux version. For more -- information on the supported operating systems, see -- . csDefaultOS :: Lens' CreateStack (Maybe Text) csDefaultOS = lens _csDefaultOS (\ s a -> s{_csDefaultOS = a}); -- | Whether to associate the AWS OpsWorks built-in security groups with the -- stack\'s layers. -- -- AWS OpsWorks provides a standard set of built-in security groups, one -- for each layer, which are associated with layers by default. With -- 'UseOpsworksSecurityGroups' you can instead provide your own custom -- security groups. 'UseOpsworksSecurityGroups' has the following settings: -- -- - True - AWS OpsWorks automatically associates the appropriate -- built-in security group with each layer (default setting). You can -- associate additional security groups with a layer after you create -- it, but you cannot delete the built-in security group. -- - False - AWS OpsWorks does not associate built-in security groups -- with layers. You must create appropriate EC2 security groups and -- associate a security group with each layer that you create. However, -- you can still manually associate a built-in security group with a -- layer on creation; custom security groups are required only for -- those layers that need custom settings. -- -- For more information, see -- . csUseOpsworksSecurityGroups :: Lens' CreateStack (Maybe Bool) csUseOpsworksSecurityGroups = lens _csUseOpsworksSecurityGroups (\ s a -> s{_csUseOpsworksSecurityGroups = a}); -- | Whether the stack uses custom cookbooks. csUseCustomCookbooks :: Lens' CreateStack (Maybe Bool) csUseCustomCookbooks = lens _csUseCustomCookbooks (\ s a -> s{_csUseCustomCookbooks = a}); -- | The stack\'s default VPC subnet ID. This parameter is required if you -- specify a value for the 'VpcId' parameter. All instances are launched -- into this subnet unless you specify otherwise when you create the -- instance. If you also specify a value for 'DefaultAvailabilityZone', the -- subnet must be in that zone. For information on default values and when -- this parameter is required, see the 'VpcId' parameter description. csDefaultSubnetId :: Lens' CreateStack (Maybe Text) csDefaultSubnetId = lens _csDefaultSubnetId (\ s a -> s{_csDefaultSubnetId = a}); -- | The configuration manager. When you create a stack we recommend that you -- use the configuration manager to specify the Chef version: 12, 11.10, or -- 11.4 for Linux stacks, or 12.2 for Windows stacks. The default value for -- Linux stacks is currently 11.4. csConfigurationManager :: Lens' CreateStack (Maybe StackConfigurationManager) csConfigurationManager = lens _csConfigurationManager (\ s a -> s{_csConfigurationManager = a}); -- | The stack\'s host name theme, with spaces replaced by underscores. The -- theme is used to generate host names for the stack\'s instances. By -- default, 'HostnameTheme' is set to 'Layer_Dependent', which creates host -- names by appending integers to the layer\'s short name. The other themes -- are: -- -- - 'Baked_Goods' -- - 'Clouds' -- - 'Europe_Cities' -- - 'Fruits' -- - 'Greek_Deities' -- - 'Legendary_creatures_from_Japan' -- - 'Planets_and_Moons' -- - 'Roman_Deities' -- - 'Scottish_Islands' -- - 'US_Cities' -- - 'Wild_Cats' -- -- To obtain a generated host name, call 'GetHostNameSuggestion', which -- returns a host name based on the current theme. csHostnameTheme :: Lens' CreateStack (Maybe Text) csHostnameTheme = lens _csHostnameTheme (\ s a -> s{_csHostnameTheme = a}); -- | The stack name. csName :: Lens' CreateStack Text csName = lens _csName (\ s a -> s{_csName = a}); -- | The stack\'s AWS region, such as \"us-east-1\". For more information -- about Amazon regions, see -- . csRegion :: Lens' CreateStack Text csRegion = lens _csRegion (\ s a -> s{_csRegion = a}); -- | The stack\'s AWS Identity and Access Management (IAM) role, which allows -- AWS OpsWorks to work with AWS resources on your behalf. You must set -- this parameter to the Amazon Resource Name (ARN) for an existing IAM -- role. For more information about IAM ARNs, see -- . csServiceRoleARN :: Lens' CreateStack Text csServiceRoleARN = lens _csServiceRoleARN (\ s a -> s{_csServiceRoleARN = a}); -- | The Amazon Resource Name (ARN) of an IAM profile that is the default -- profile for all of the stack\'s EC2 instances. For more information -- about IAM ARNs, see -- . csDefaultInstanceProfileARN :: Lens' CreateStack Text csDefaultInstanceProfileARN = lens _csDefaultInstanceProfileARN (\ s a -> s{_csDefaultInstanceProfileARN = a}); instance AWSRequest CreateStack where type Rs CreateStack = CreateStackResponse request = postJSON opsWorks response = receiveJSON (\ s h x -> CreateStackResponse' <$> (x .?> "StackId") <*> (pure (fromEnum s))) instance Hashable CreateStack instance NFData CreateStack instance ToHeaders CreateStack where toHeaders = const (mconcat ["X-Amz-Target" =# ("OpsWorks_20130218.CreateStack" :: ByteString), "Content-Type" =# ("application/x-amz-json-1.1" :: ByteString)]) instance ToJSON CreateStack where toJSON CreateStack'{..} = object (catMaybes [("DefaultRootDeviceType" .=) <$> _csDefaultRootDeviceType, ("VpcId" .=) <$> _csVPCId, ("ChefConfiguration" .=) <$> _csChefConfiguration, ("AgentVersion" .=) <$> _csAgentVersion, ("DefaultSshKeyName" .=) <$> _csDefaultSSHKeyName, ("CustomJson" .=) <$> _csCustomJSON, ("CustomCookbooksSource" .=) <$> _csCustomCookbooksSource, ("DefaultAvailabilityZone" .=) <$> _csDefaultAvailabilityZone, ("Attributes" .=) <$> _csAttributes, ("DefaultOs" .=) <$> _csDefaultOS, ("UseOpsworksSecurityGroups" .=) <$> _csUseOpsworksSecurityGroups, ("UseCustomCookbooks" .=) <$> _csUseCustomCookbooks, ("DefaultSubnetId" .=) <$> _csDefaultSubnetId, ("ConfigurationManager" .=) <$> _csConfigurationManager, ("HostnameTheme" .=) <$> _csHostnameTheme, Just ("Name" .= _csName), Just ("Region" .= _csRegion), Just ("ServiceRoleArn" .= _csServiceRoleARN), Just ("DefaultInstanceProfileArn" .= _csDefaultInstanceProfileARN)]) instance ToPath CreateStack where toPath = const "/" instance ToQuery CreateStack where toQuery = const mempty -- | Contains the response to a 'CreateStack' request. -- -- /See:/ 'createStackResponse' smart constructor. data CreateStackResponse = CreateStackResponse' { _crsStackId :: !(Maybe Text) , _crsResponseStatus :: !Int } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'CreateStackResponse' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'crsStackId' -- -- * 'crsResponseStatus' createStackResponse :: Int -- ^ 'crsResponseStatus' -> CreateStackResponse createStackResponse pResponseStatus_ = CreateStackResponse' { _crsStackId = Nothing , _crsResponseStatus = pResponseStatus_ } -- | The stack ID, which is an opaque string that you use to identify the -- stack when performing actions such as 'DescribeStacks'. crsStackId :: Lens' CreateStackResponse (Maybe Text) crsStackId = lens _crsStackId (\ s a -> s{_crsStackId = a}); -- | The response status code. crsResponseStatus :: Lens' CreateStackResponse Int crsResponseStatus = lens _crsResponseStatus (\ s a -> s{_crsResponseStatus = a}); instance NFData CreateStackResponse