module AWS.EC2.Volume
( describeVolumes
) where
import Data.Text (Text)
import Data.XML.Types (Event)
import Data.Conduit
import Control.Monad.Trans.Control (MonadBaseControl)
import Control.Applicative
import AWS.EC2.Types
import AWS.EC2.Class
import AWS.EC2.Query
import AWS.EC2.Parser
import AWS.Util
describeVolumes
:: (MonadResource m, MonadBaseControl IO m)
=> [Text]
-> [Filter]
-> EC2 m (Source m Volume)
describeVolumes vids filters =
ec2QuerySource "DescribeVolumes" params volumeSet
where
params =
[ ArrayParams "VolumeId" vids
, FilterParams filters
]
volumeSet :: MonadThrow m
=> GLConduit Event m Volume
volumeSet = itemConduit "volumeSet" $
volume
<$> getT "volumeId"
<*> getF "size" textToInt
<*> getMT "snapshotId"
<*> getT "availabilityZone"
<*> getF "status" volumeStatus
<*> getF "createTime" textToTime
<*> itemsSet "attachmentSet" (
attachment
<$> getT "volumeId"
<*> getT "instanceId"
<*> getT "device"
<*> getF "status" attachmentStatus
<*> getF "attachTime" textToTime
<*> getF "deleteOnTermination" textToBool
)
<*> resourceTagSink
<*> volumeTypeSink