amazonka-ec2-1.2.0: gen/Network/AWS/EC2/DetachVolume.hs
{-# 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.EC2.DetachVolume
-- Copyright : (c) 2013-2015 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)
--
-- Detaches an EBS volume from an instance. Make sure to unmount any file
-- systems on the device within your operating system before detaching the
-- volume. Failure to do so results in the volume being stuck in a busy
-- state while detaching.
--
-- If an Amazon EBS volume is the root device of an instance, it can\'t be
-- detached while the instance is running. To detach the root volume, stop
-- the instance first.
--
-- When a volume with an AWS Marketplace product code is detached from an
-- instance, the product code is no longer associated with the instance.
--
-- For more information, see
-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-detaching-volume.html Detaching an Amazon EBS Volume>
-- in the /Amazon Elastic Compute Cloud User Guide/.
--
-- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DetachVolume.html AWS API Reference> for DetachVolume.
module Network.AWS.EC2.DetachVolume
(
-- * Creating a Request
detachVolume
, DetachVolume
-- * Request Lenses
, dvInstanceId
, dvForce
, dvDevice
, dvDryRun
, dvVolumeId
-- * Destructuring the Response
, volumeAttachment
, VolumeAttachment
-- * Response Lenses
, volInstanceId
, volDeleteOnTermination
, volState
, volDevice
, volVolumeId
, volAttachTime
) where
import Network.AWS.EC2.Types
import Network.AWS.EC2.Types.Product
import Network.AWS.Prelude
import Network.AWS.Request
import Network.AWS.Response
-- | /See:/ 'detachVolume' smart constructor.
data DetachVolume = DetachVolume'
{ _dvInstanceId :: !(Maybe Text)
, _dvForce :: !(Maybe Bool)
, _dvDevice :: !(Maybe Text)
, _dvDryRun :: !(Maybe Bool)
, _dvVolumeId :: !Text
} deriving (Eq,Read,Show,Data,Typeable,Generic)
-- | Creates a value of 'DetachVolume' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'dvInstanceId'
--
-- * 'dvForce'
--
-- * 'dvDevice'
--
-- * 'dvDryRun'
--
-- * 'dvVolumeId'
detachVolume
:: Text -- ^ 'dvVolumeId'
-> DetachVolume
detachVolume pVolumeId_ =
DetachVolume'
{ _dvInstanceId = Nothing
, _dvForce = Nothing
, _dvDevice = Nothing
, _dvDryRun = Nothing
, _dvVolumeId = pVolumeId_
}
-- | The ID of the instance.
dvInstanceId :: Lens' DetachVolume (Maybe Text)
dvInstanceId = lens _dvInstanceId (\ s a -> s{_dvInstanceId = a});
-- | Forces detachment if the previous detachment attempt did not occur
-- cleanly (for example, logging into an instance, unmounting the volume,
-- and detaching normally). This option can lead to data loss or a
-- corrupted file system. Use this option only as a last resort to detach a
-- volume from a failed instance. The instance won\'t have an opportunity
-- to flush file system caches or file system metadata. If you use this
-- option, you must perform file system check and repair procedures.
dvForce :: Lens' DetachVolume (Maybe Bool)
dvForce = lens _dvForce (\ s a -> s{_dvForce = a});
-- | The device name.
dvDevice :: Lens' DetachVolume (Maybe Text)
dvDevice = lens _dvDevice (\ s a -> s{_dvDevice = a});
-- | Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is 'DryRunOperation'.
-- Otherwise, it is 'UnauthorizedOperation'.
dvDryRun :: Lens' DetachVolume (Maybe Bool)
dvDryRun = lens _dvDryRun (\ s a -> s{_dvDryRun = a});
-- | The ID of the volume.
dvVolumeId :: Lens' DetachVolume Text
dvVolumeId = lens _dvVolumeId (\ s a -> s{_dvVolumeId = a});
instance AWSRequest DetachVolume where
type Rs DetachVolume = VolumeAttachment
request = postQuery eC2
response = receiveXML (\ s h x -> parseXML x)
instance ToHeaders DetachVolume where
toHeaders = const mempty
instance ToPath DetachVolume where
toPath = const "/"
instance ToQuery DetachVolume where
toQuery DetachVolume'{..}
= mconcat
["Action" =: ("DetachVolume" :: ByteString),
"Version" =: ("2015-04-15" :: ByteString),
"InstanceId" =: _dvInstanceId, "Force" =: _dvForce,
"Device" =: _dvDevice, "DryRun" =: _dvDryRun,
"VolumeId" =: _dvVolumeId]