{-# 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.Route53.CreateHostedZone -- Copyright : (c) 2013-2015 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- This action creates a new hosted zone. -- -- To create a new hosted zone, send a 'POST' request to the -- '2013-04-01\/hostedzone' resource. The request body must include an XML -- document with a 'CreateHostedZoneRequest' element. The response returns -- the 'CreateHostedZoneResponse' element that contains metadata about the -- hosted zone. -- -- Route 53 automatically creates a default SOA record and four NS records -- for the zone. The NS records in the hosted zone are the name servers you -- give your registrar to delegate your domain to. For more information -- about SOA and NS records, see -- -- in the /Amazon Route 53 Developer Guide/. -- -- When you create a zone, its initial status is 'PENDING'. This means that -- it is not yet available on all DNS servers. The status of the zone -- changes to 'INSYNC' when the NS and SOA records are available on all -- Route 53 DNS servers. -- -- When trying to create a hosted zone using a reusable delegation set, you -- could specify an optional DelegationSetId, and Route53 would assign -- those 4 NS records for the zone, instead of alloting a new one. -- -- /See:/ for CreateHostedZone. module Network.AWS.Route53.CreateHostedZone ( -- * Creating a Request createHostedZone , CreateHostedZone -- * Request Lenses , chzDelegationSetId , chzVPC , chzHostedZoneConfig , chzName , chzCallerReference -- * Destructuring the Response , createHostedZoneResponse , CreateHostedZoneResponse -- * Response Lenses , chzrsVPC , chzrsResponseStatus , chzrsHostedZone , chzrsChangeInfo , chzrsDelegationSet , chzrsLocation ) where import Network.AWS.Prelude import Network.AWS.Request import Network.AWS.Response import Network.AWS.Route53.Types import Network.AWS.Route53.Types.Product -- | A complex type that contains information about the request to create a -- hosted zone. -- -- /See:/ 'createHostedZone' smart constructor. data CreateHostedZone = CreateHostedZone' { _chzDelegationSetId :: !(Maybe Text) , _chzVPC :: !(Maybe VPC) , _chzHostedZoneConfig :: !(Maybe HostedZoneConfig) , _chzName :: !Text , _chzCallerReference :: !Text } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'CreateHostedZone' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'chzDelegationSetId' -- -- * 'chzVPC' -- -- * 'chzHostedZoneConfig' -- -- * 'chzName' -- -- * 'chzCallerReference' createHostedZone :: Text -- ^ 'chzName' -> Text -- ^ 'chzCallerReference' -> CreateHostedZone createHostedZone pName_ pCallerReference_ = CreateHostedZone' { _chzDelegationSetId = Nothing , _chzVPC = Nothing , _chzHostedZoneConfig = Nothing , _chzName = pName_ , _chzCallerReference = pCallerReference_ } -- | The delegation set id of the reusable delgation set whose NS records you -- want to assign to the new hosted zone. chzDelegationSetId :: Lens' CreateHostedZone (Maybe Text) chzDelegationSetId = lens _chzDelegationSetId (\ s a -> s{_chzDelegationSetId = a}); -- | The VPC that you want your hosted zone to be associated with. By -- providing this parameter, your newly created hosted cannot be resolved -- anywhere other than the given VPC. chzVPC :: Lens' CreateHostedZone (Maybe VPC) chzVPC = lens _chzVPC (\ s a -> s{_chzVPC = a}); -- | A complex type that contains an optional comment about your hosted zone. chzHostedZoneConfig :: Lens' CreateHostedZone (Maybe HostedZoneConfig) chzHostedZoneConfig = lens _chzHostedZoneConfig (\ s a -> s{_chzHostedZoneConfig = a}); -- | The name of the domain. This must be a fully-specified domain, for -- example, www.example.com. The trailing dot is optional; Route 53 assumes -- that the domain name is fully qualified. This means that Route 53 treats -- www.example.com (without a trailing dot) and www.example.com. (with a -- trailing dot) as identical. -- -- This is the name you have registered with your DNS registrar. You should -- ask your registrar to change the authoritative name servers for your -- domain to the set of 'NameServers' elements returned in 'DelegationSet'. chzName :: Lens' CreateHostedZone Text chzName = lens _chzName (\ s a -> s{_chzName = a}); -- | A unique string that identifies the request and that allows failed -- 'CreateHostedZone' requests to be retried without the risk of executing -- the operation twice. You must use a unique 'CallerReference' string -- every time you create a hosted zone. 'CallerReference' can be any unique -- string; you might choose to use a string that identifies your project, -- such as 'DNSMigration_01'. -- -- Valid characters are any Unicode code points that are legal in an XML -- 1.0 document. The UTF-8 encoding of the value must be less than 128 -- bytes. chzCallerReference :: Lens' CreateHostedZone Text chzCallerReference = lens _chzCallerReference (\ s a -> s{_chzCallerReference = a}); instance AWSRequest CreateHostedZone where type Rs CreateHostedZone = CreateHostedZoneResponse request = postXML route53 response = receiveXML (\ s h x -> CreateHostedZoneResponse' <$> (x .@? "VPC") <*> (pure (fromEnum s)) <*> (x .@ "HostedZone") <*> (x .@ "ChangeInfo") <*> (x .@ "DelegationSet") <*> (h .# "Location")) instance ToElement CreateHostedZone where toElement = mkElement "{https://route53.amazonaws.com/doc/2013-04-01/}CreateHostedZoneRequest" instance ToHeaders CreateHostedZone where toHeaders = const mempty instance ToPath CreateHostedZone where toPath = const "/2013-04-01/hostedzone" instance ToQuery CreateHostedZone where toQuery = const mempty instance ToXML CreateHostedZone where toXML CreateHostedZone'{..} = mconcat ["DelegationSetId" @= _chzDelegationSetId, "VPC" @= _chzVPC, "HostedZoneConfig" @= _chzHostedZoneConfig, "Name" @= _chzName, "CallerReference" @= _chzCallerReference] -- | A complex type containing the response information for the new hosted -- zone. -- -- /See:/ 'createHostedZoneResponse' smart constructor. data CreateHostedZoneResponse = CreateHostedZoneResponse' { _chzrsVPC :: !(Maybe VPC) , _chzrsResponseStatus :: !Int , _chzrsHostedZone :: !HostedZone , _chzrsChangeInfo :: !ChangeInfo , _chzrsDelegationSet :: !DelegationSet , _chzrsLocation :: !Text } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'CreateHostedZoneResponse' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'chzrsVPC' -- -- * 'chzrsResponseStatus' -- -- * 'chzrsHostedZone' -- -- * 'chzrsChangeInfo' -- -- * 'chzrsDelegationSet' -- -- * 'chzrsLocation' createHostedZoneResponse :: Int -- ^ 'chzrsResponseStatus' -> HostedZone -- ^ 'chzrsHostedZone' -> ChangeInfo -- ^ 'chzrsChangeInfo' -> DelegationSet -- ^ 'chzrsDelegationSet' -> Text -- ^ 'chzrsLocation' -> CreateHostedZoneResponse createHostedZoneResponse pResponseStatus_ pHostedZone_ pChangeInfo_ pDelegationSet_ pLocation_ = CreateHostedZoneResponse' { _chzrsVPC = Nothing , _chzrsResponseStatus = pResponseStatus_ , _chzrsHostedZone = pHostedZone_ , _chzrsChangeInfo = pChangeInfo_ , _chzrsDelegationSet = pDelegationSet_ , _chzrsLocation = pLocation_ } -- | Undocumented member. chzrsVPC :: Lens' CreateHostedZoneResponse (Maybe VPC) chzrsVPC = lens _chzrsVPC (\ s a -> s{_chzrsVPC = a}); -- | The response status code. chzrsResponseStatus :: Lens' CreateHostedZoneResponse Int chzrsResponseStatus = lens _chzrsResponseStatus (\ s a -> s{_chzrsResponseStatus = a}); -- | A complex type that contains identifying information about the hosted -- zone. chzrsHostedZone :: Lens' CreateHostedZoneResponse HostedZone chzrsHostedZone = lens _chzrsHostedZone (\ s a -> s{_chzrsHostedZone = a}); -- | A complex type that contains information about the request to create a -- hosted zone. This includes an ID that you use when you call the -- GetChange action to get the current status of the change request. chzrsChangeInfo :: Lens' CreateHostedZoneResponse ChangeInfo chzrsChangeInfo = lens _chzrsChangeInfo (\ s a -> s{_chzrsChangeInfo = a}); -- | A complex type that contains name server information. chzrsDelegationSet :: Lens' CreateHostedZoneResponse DelegationSet chzrsDelegationSet = lens _chzrsDelegationSet (\ s a -> s{_chzrsDelegationSet = a}); -- | The unique URL representing the new hosted zone. chzrsLocation :: Lens' CreateHostedZoneResponse Text chzrsLocation = lens _chzrsLocation (\ s a -> s{_chzrsLocation = a});