module AWS.EC2.Address
( describeAddresses
, allocateAddress
, releaseAddress
, associateAddress
, AssociateAddressRequest(..)
, disassociateAddress
, DisassociateAddressRequest(..)
) where
import Data.Text (Text)
import Data.IP (IPv4)
import Data.XML.Types (Event)
import Data.Conduit
import Control.Applicative
import AWS.EC2.Internal
import AWS.EC2.Types
import AWS.EC2.Query
import AWS.Lib.Parser
import AWS.Util
describeAddresses
:: (MonadResource m, MonadBaseControl IO m)
=> [Text]
-> [Text]
-> [Filter]
-> EC2 m (ResumableSource m Address)
describeAddresses pubIps alloIds filters =
ec2QuerySource "DescribeAddresses" params addressSet where
params =
[ "PublicIp" |.#= pubIps
, "AllocationId" |.#= alloIds
, filtersParam filters
]
addressSet :: MonadThrow m => GLConduit Event m Address
addressSet = itemConduit "addressesSet" $ Address
<$> getT "publicIp"
<*> getT "allocationId"
<*> getT "domain"
<*> getT "instanceId"
<*> getT "associationId"
<*> getT "networkInterfaceId"
<*> getT "networkInterfaceOwnerId"
<*> getT "privateIpAddress"
allocateAddress
:: (MonadResource m, MonadBaseControl IO m)
=> Bool
-> EC2 m AllocateAddress
allocateAddress isVpc = do
ec2Query "AllocateAddress" params $
AllocateAddress
<$> getT "publicIp"
<*> getT "domain"
<*> getT "allocationId"
where
params = if isVpc then ["Domain" |= "vpc"] else []
releaseAddress
:: (MonadResource m, MonadBaseControl IO m)
=> Maybe IPv4
-> Maybe Text
-> EC2 m EC2Return
releaseAddress addr allocid = do
ec2Query "ReleaseAddress" params $ getT "return"
where
params =
[ "PublicIp" |=? toText <$> addr
, "AllocationId" |=? allocid
]
associateAddress
:: (MonadResource m, MonadBaseControl IO m)
=> AssociateAddressRequest
-> EC2 m (Bool, Maybe Text)
associateAddress param = ec2Query "AssociateAddress" params $
(,) <$> getT "return"
<*> getT "associationId"
where
params = associateAddressParams param
associateAddressParams
:: AssociateAddressRequest -> [QueryParam]
associateAddressParams (AssociateAddressRequestEc2 ip iid) =
[ "PublicIp" |= toText ip
, "InstanceId" |= iid
]
associateAddressParams (AssociateAddressRequestVpc aid iid nid pip ar) =
[ "AllocationId" |= aid
, "InstanceId" |=? iid
, "NetworkInterfaceId" |=? nid
, "PrivateIpAddress" |=? toText <$> pip
, "AllowReassociation" |=? boolToText <$> ar
]
disassociateAddress
:: (MonadResource m, MonadBaseControl IO m)
=> DisassociateAddressRequest
-> EC2 m Bool
disassociateAddress param =
ec2Query "DisassociateAddress" (p param)
$ getT "return"
where
p (DisassociateAddressRequestEc2 pip)
= ["PublicIp" |= toText pip]
p (DisassociateAddressRequestVpc aid)
= ["AssociationId" |= toText aid]