{-# 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-2016 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay <brendan.g.hay@gmail.com> -- 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 '\/Route 53 API version\/hostedzone' resource. The request body must include a document with a 'CreateHostedZoneRequest' element. The response returns the 'CreateHostedZoneResponse' element that contains metadata about the hosted zone. -- -- Amazon 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 <http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/SOA-NSrecords.html NS and SOA Records that Amazon Route 53 Creates for a Hosted Zone> 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 Amazon 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. 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.Lens 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; Amazon Route 53 assumes that the domain name is fully qualified. This means that Amazon 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 Hashable CreateHostedZone instance NFData CreateHostedZone 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}); instance NFData CreateHostedZoneResponse