aws-sdk 0.4.3.0 → 0.5.0.0
raw patch · 20 files changed
+756/−56 lines, 20 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ AWS.EC2: associateRouteTable :: (MonadResource m, MonadBaseControl IO m) => Text -> Text -> EC2 m Text
+ AWS.EC2: createNetworkAcl :: (MonadResource m, MonadBaseControl IO m) => Text -> EC2 m NetworkAcl
+ AWS.EC2: createNetworkAclEntry :: (MonadResource m, MonadBaseControl IO m) => NetworkAclEntryRequest -> EC2 m Bool
+ AWS.EC2: createRouteTable :: (MonadResource m, MonadBaseControl IO m) => Text -> EC2 m RouteTable
+ AWS.EC2: createSubnet :: (MonadResource m, MonadBaseControl IO m) => CreateSubnetRequest -> EC2 m Subnet
+ AWS.EC2: deleteNetworkAcl :: (MonadResource m, MonadBaseControl IO m) => Text -> EC2 m Bool
+ AWS.EC2: deleteNetworkAclEntry :: (MonadResource m, MonadBaseControl IO m) => Text -> Int -> Bool -> EC2 m Bool
+ AWS.EC2: deleteRouteTable :: (MonadResource m, MonadBaseControl IO m) => Text -> EC2 m Bool
+ AWS.EC2: deleteSubnet :: (MonadResource m, MonadBaseControl IO m) => Text -> EC2 m Bool
+ AWS.EC2: describeNetworkAcls :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (ResumableSource m NetworkAcl)
+ AWS.EC2: describeRouteTables :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (ResumableSource m RouteTable)
+ AWS.EC2: describeSubnets :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (ResumableSource m Subnet)
+ AWS.EC2: describeVolumeAttribute :: (MonadResource m, MonadBaseControl IO m) => Text -> VolumeAttributeRequest -> EC2 m (Text, VolumeAttribute)
+ AWS.EC2: describeVolumeStatus :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> Maybe Text -> EC2 m (ResumableSource m VolumeStatus)
+ AWS.EC2: disassociateRouteTable :: (MonadResource m, MonadBaseControl IO m) => Text -> EC2 m Bool
+ AWS.EC2: enableVolumeIO :: (MonadResource m, MonadBaseControl IO m) => Text -> EC2 m Bool
+ AWS.EC2: modifyVolumeAttribute :: (MonadResource m, MonadBaseControl IO m) => Text -> Bool -> EC2 m Bool
+ AWS.EC2: replaceNetworkAclAssociation :: (MonadResource m, MonadBaseControl IO m) => Text -> Text -> EC2 m Text
+ AWS.EC2: replaceNetworkAclEntry :: (MonadResource m, MonadBaseControl IO m) => NetworkAclEntryRequest -> EC2 m Bool
+ AWS.EC2: replaceRouteTableAssociation :: (MonadResource m, MonadBaseControl IO m) => Text -> Text -> EC2 m Text
+ AWS.EC2.Types: CreateSubnetRequest :: Text -> Text -> Maybe Text -> CreateSubnetRequest
+ AWS.EC2.Types: IcmpTypeCode :: Int -> Int -> IcmpTypeCode
+ AWS.EC2.Types: NetworkAcl :: Text -> Text -> Bool -> [NetworkAclEntry] -> [NetworkAclAssociation] -> [ResourceTag] -> NetworkAcl
+ AWS.EC2.Types: NetworkAclAssociation :: Text -> Text -> Text -> NetworkAclAssociation
+ AWS.EC2.Types: NetworkAclEntry :: Int -> Int -> NetworkAclRuleAction -> Bool -> Text -> Maybe IcmpTypeCode -> Maybe PortRange -> NetworkAclEntry
+ AWS.EC2.Types: NetworkAclEntryRequest :: Text -> Int -> Int -> NetworkAclRuleAction -> Bool -> Text -> Maybe IcmpTypeCode -> Maybe PortRange -> NetworkAclEntryRequest
+ AWS.EC2.Types: NetworkAclRuleActionAllow :: NetworkAclRuleAction
+ AWS.EC2.Types: NetworkAclRuleActionDeny :: NetworkAclRuleAction
+ AWS.EC2.Types: PortRange :: Int -> Int -> PortRange
+ AWS.EC2.Types: Route :: Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> RouteState -> Maybe RouteOrigin -> Route
+ AWS.EC2.Types: RouteOriginCreateRoute :: RouteOrigin
+ AWS.EC2.Types: RouteOriginCreateRouteTable :: RouteOrigin
+ AWS.EC2.Types: RouteOriginTableEnableVgwRoutePropagation :: RouteOrigin
+ AWS.EC2.Types: RouteStateActive :: RouteState
+ AWS.EC2.Types: RouteStateBlackhole :: RouteState
+ AWS.EC2.Types: RouteTable :: Text -> Text -> [Route] -> [RouteTableAssociation] -> Maybe PropagatingVgw -> [ResourceTag] -> RouteTable
+ AWS.EC2.Types: RouteTableAssociation :: Text -> Text -> Maybe Text -> Maybe Bool -> RouteTableAssociation
+ AWS.EC2.Types: Subnet :: Text -> SubnetState -> Text -> Text -> Int -> Text -> [ResourceTag] -> Subnet
+ AWS.EC2.Types: SubnetAvailable :: SubnetState
+ AWS.EC2.Types: SubnetPending :: SubnetState
+ AWS.EC2.Types: VAAutoEnableIO :: Bool -> VolumeAttribute
+ AWS.EC2.Types: VAProductCodes :: [ProductCode] -> VolumeAttribute
+ AWS.EC2.Types: VARAutoEnableIO :: VolumeAttributeRequest
+ AWS.EC2.Types: VARProductCodes :: VolumeAttributeRequest
+ AWS.EC2.Types: VSIImpaired :: VolumeStatusInfoStatus
+ AWS.EC2.Types: VSIInsufficientData :: VolumeStatusInfoStatus
+ AWS.EC2.Types: VSIOK :: VolumeStatusInfoStatus
+ AWS.EC2.Types: VolumeStatus :: Text -> Text -> VolumeStatusInfo -> [VolumeStatusEvent] -> [VolumeStatusAction] -> VolumeStatus
+ AWS.EC2.Types: VolumeStatusAction :: Text -> Text -> Text -> Text -> VolumeStatusAction
+ AWS.EC2.Types: VolumeStatusDetail :: Text -> Text -> VolumeStatusDetail
+ AWS.EC2.Types: VolumeStatusEvent :: Text -> Text -> Text -> Maybe UTCTime -> Maybe UTCTime -> VolumeStatusEvent
+ AWS.EC2.Types: VolumeStatusInfo :: VolumeStatusInfoStatus -> [VolumeStatusDetail] -> VolumeStatusInfo
+ AWS.EC2.Types: csrAvailabilityZone :: CreateSubnetRequest -> Maybe Text
+ AWS.EC2.Types: csrCidrBlock :: CreateSubnetRequest -> Text
+ AWS.EC2.Types: csrVpcId :: CreateSubnetRequest -> Text
+ AWS.EC2.Types: data CreateSubnetRequest
+ AWS.EC2.Types: data IcmpTypeCode
+ AWS.EC2.Types: data NetworkAcl
+ AWS.EC2.Types: data NetworkAclAssociation
+ AWS.EC2.Types: data NetworkAclEntry
+ AWS.EC2.Types: data NetworkAclEntryRequest
+ AWS.EC2.Types: data NetworkAclRuleAction
+ AWS.EC2.Types: data PortRange
+ AWS.EC2.Types: data Route
+ AWS.EC2.Types: data RouteOrigin
+ AWS.EC2.Types: data RouteState
+ AWS.EC2.Types: data RouteTable
+ AWS.EC2.Types: data RouteTableAssociation
+ AWS.EC2.Types: data Subnet
+ AWS.EC2.Types: data SubnetState
+ AWS.EC2.Types: data VolumeAttribute
+ AWS.EC2.Types: data VolumeAttributeRequest
+ AWS.EC2.Types: data VolumeState
+ AWS.EC2.Types: data VolumeStatusAction
+ AWS.EC2.Types: data VolumeStatusDetail
+ AWS.EC2.Types: data VolumeStatusEvent
+ AWS.EC2.Types: data VolumeStatusInfo
+ AWS.EC2.Types: data VolumeStatusInfoStatus
+ AWS.EC2.Types: icmpTypeCodeCode :: IcmpTypeCode -> Int
+ AWS.EC2.Types: icmpTypeCodeType :: IcmpTypeCode -> Int
+ AWS.EC2.Types: instance Eq CreateSubnetRequest
+ AWS.EC2.Types: instance Eq IcmpTypeCode
+ AWS.EC2.Types: instance Eq NetworkAcl
+ AWS.EC2.Types: instance Eq NetworkAclAssociation
+ AWS.EC2.Types: instance Eq NetworkAclEntry
+ AWS.EC2.Types: instance Eq NetworkAclEntryRequest
+ AWS.EC2.Types: instance Eq NetworkAclRuleAction
+ AWS.EC2.Types: instance Eq PortRange
+ AWS.EC2.Types: instance Eq Route
+ AWS.EC2.Types: instance Eq RouteOrigin
+ AWS.EC2.Types: instance Eq RouteState
+ AWS.EC2.Types: instance Eq RouteTable
+ AWS.EC2.Types: instance Eq RouteTableAssociation
+ AWS.EC2.Types: instance Eq Subnet
+ AWS.EC2.Types: instance Eq SubnetState
+ AWS.EC2.Types: instance Eq VolumeAttribute
+ AWS.EC2.Types: instance Eq VolumeAttributeRequest
+ AWS.EC2.Types: instance Eq VolumeState
+ AWS.EC2.Types: instance Eq VolumeStatusAction
+ AWS.EC2.Types: instance Eq VolumeStatusDetail
+ AWS.EC2.Types: instance Eq VolumeStatusEvent
+ AWS.EC2.Types: instance Eq VolumeStatusInfo
+ AWS.EC2.Types: instance Eq VolumeStatusInfoStatus
+ AWS.EC2.Types: instance Show CreateSubnetRequest
+ AWS.EC2.Types: instance Show IcmpTypeCode
+ AWS.EC2.Types: instance Show NetworkAcl
+ AWS.EC2.Types: instance Show NetworkAclAssociation
+ AWS.EC2.Types: instance Show NetworkAclEntry
+ AWS.EC2.Types: instance Show NetworkAclEntryRequest
+ AWS.EC2.Types: instance Show NetworkAclRuleAction
+ AWS.EC2.Types: instance Show PortRange
+ AWS.EC2.Types: instance Show Route
+ AWS.EC2.Types: instance Show RouteOrigin
+ AWS.EC2.Types: instance Show RouteState
+ AWS.EC2.Types: instance Show RouteTable
+ AWS.EC2.Types: instance Show RouteTableAssociation
+ AWS.EC2.Types: instance Show Subnet
+ AWS.EC2.Types: instance Show SubnetState
+ AWS.EC2.Types: instance Show VolumeAttribute
+ AWS.EC2.Types: instance Show VolumeAttributeRequest
+ AWS.EC2.Types: instance Show VolumeState
+ AWS.EC2.Types: instance Show VolumeStatusAction
+ AWS.EC2.Types: instance Show VolumeStatusDetail
+ AWS.EC2.Types: instance Show VolumeStatusEvent
+ AWS.EC2.Types: instance Show VolumeStatusInfo
+ AWS.EC2.Types: instance Show VolumeStatusInfoStatus
+ AWS.EC2.Types: networkAclAssociationId :: NetworkAclAssociation -> Text
+ AWS.EC2.Types: networkAclAssociationNetworkAclId :: NetworkAclAssociation -> Text
+ AWS.EC2.Types: networkAclAssociationSet :: NetworkAcl -> [NetworkAclAssociation]
+ AWS.EC2.Types: networkAclAssociationSubnetId :: NetworkAclAssociation -> Text
+ AWS.EC2.Types: networkAclDefault :: NetworkAcl -> Bool
+ AWS.EC2.Types: networkAclEntryCidrBlock :: NetworkAclEntry -> Text
+ AWS.EC2.Types: networkAclEntryEgress :: NetworkAclEntry -> Bool
+ AWS.EC2.Types: networkAclEntryIcmpTypeCode :: NetworkAclEntry -> Maybe IcmpTypeCode
+ AWS.EC2.Types: networkAclEntryPortRange :: NetworkAclEntry -> Maybe PortRange
+ AWS.EC2.Types: networkAclEntryProtocol :: NetworkAclEntry -> Int
+ AWS.EC2.Types: networkAclEntryRequestCidrBlock :: NetworkAclEntryRequest -> Text
+ AWS.EC2.Types: networkAclEntryRequestEgress :: NetworkAclEntryRequest -> Bool
+ AWS.EC2.Types: networkAclEntryRequestIcmp :: NetworkAclEntryRequest -> Maybe IcmpTypeCode
+ AWS.EC2.Types: networkAclEntryRequestNetworkAclId :: NetworkAclEntryRequest -> Text
+ AWS.EC2.Types: networkAclEntryRequestPortRange :: NetworkAclEntryRequest -> Maybe PortRange
+ AWS.EC2.Types: networkAclEntryRequestProtocol :: NetworkAclEntryRequest -> Int
+ AWS.EC2.Types: networkAclEntryRequestRuleAction :: NetworkAclEntryRequest -> NetworkAclRuleAction
+ AWS.EC2.Types: networkAclEntryRequestRuleNumber :: NetworkAclEntryRequest -> Int
+ AWS.EC2.Types: networkAclEntryRuleAction :: NetworkAclEntry -> NetworkAclRuleAction
+ AWS.EC2.Types: networkAclEntryRuleNumber :: NetworkAclEntry -> Int
+ AWS.EC2.Types: networkAclEntrySet :: NetworkAcl -> [NetworkAclEntry]
+ AWS.EC2.Types: networkAclId :: NetworkAcl -> Text
+ AWS.EC2.Types: networkAclTagSet :: NetworkAcl -> [ResourceTag]
+ AWS.EC2.Types: networkAclVpcId :: NetworkAcl -> Text
+ AWS.EC2.Types: portRangeFrom :: PortRange -> Int
+ AWS.EC2.Types: portRangeTo :: PortRange -> Int
+ AWS.EC2.Types: rDestinationCidrBlock :: Route -> Text
+ AWS.EC2.Types: rGatewayId :: Route -> Maybe Text
+ AWS.EC2.Types: rInstanceId :: Route -> Maybe Text
+ AWS.EC2.Types: rInstanceOwnerId :: Route -> Maybe Text
+ AWS.EC2.Types: rNetworkInterfaceId :: Route -> Maybe Text
+ AWS.EC2.Types: rOrigin :: Route -> Maybe RouteOrigin
+ AWS.EC2.Types: rState :: Route -> RouteState
+ AWS.EC2.Types: rtAssociationSet :: RouteTable -> [RouteTableAssociation]
+ AWS.EC2.Types: rtPropagatingVgw :: RouteTable -> Maybe PropagatingVgw
+ AWS.EC2.Types: rtRouteSet :: RouteTable -> [Route]
+ AWS.EC2.Types: rtRouteTableId :: RouteTable -> Text
+ AWS.EC2.Types: rtTagSet :: RouteTable -> [ResourceTag]
+ AWS.EC2.Types: rtVpcId :: RouteTable -> Text
+ AWS.EC2.Types: rtaMain :: RouteTableAssociation -> Maybe Bool
+ AWS.EC2.Types: rtaRouteTableAssociationId :: RouteTableAssociation -> Text
+ AWS.EC2.Types: rtaRouteTableId :: RouteTableAssociation -> Text
+ AWS.EC2.Types: rtaSubnetId :: RouteTableAssociation -> Maybe Text
+ AWS.EC2.Types: snAvailableIpAddressCount :: Subnet -> Int
+ AWS.EC2.Types: snCAvailabilityZone :: Subnet -> Text
+ AWS.EC2.Types: snCidrBlock :: Subnet -> Text
+ AWS.EC2.Types: snState :: Subnet -> SubnetState
+ AWS.EC2.Types: snSubnetId :: Subnet -> Text
+ AWS.EC2.Types: snTagSet :: Subnet -> [ResourceTag]
+ AWS.EC2.Types: snVpicId :: Subnet -> Text
+ AWS.EC2.Types: vsaCode :: VolumeStatusAction -> Text
+ AWS.EC2.Types: vsaDescription :: VolumeStatusAction -> Text
+ AWS.EC2.Types: vsaEventId :: VolumeStatusAction -> Text
+ AWS.EC2.Types: vsaEventType :: VolumeStatusAction -> Text
+ AWS.EC2.Types: vsdName :: VolumeStatusDetail -> Text
+ AWS.EC2.Types: vsdStatus :: VolumeStatusDetail -> Text
+ AWS.EC2.Types: vseDescription :: VolumeStatusEvent -> Text
+ AWS.EC2.Types: vseEventId :: VolumeStatusEvent -> Text
+ AWS.EC2.Types: vseEventType :: VolumeStatusEvent -> Text
+ AWS.EC2.Types: vseNotAfter :: VolumeStatusEvent -> Maybe UTCTime
+ AWS.EC2.Types: vseNotBefore :: VolumeStatusEvent -> Maybe UTCTime
+ AWS.EC2.Types: vsiDetails :: VolumeStatusInfo -> [VolumeStatusDetail]
+ AWS.EC2.Types: vsiStatus :: VolumeStatusInfo -> VolumeStatusInfoStatus
+ AWS.EC2.Types: vstActionSet :: VolumeStatus -> [VolumeStatusAction]
+ AWS.EC2.Types: vstAvailabilityZone :: VolumeStatus -> Text
+ AWS.EC2.Types: vstEventSet :: VolumeStatus -> [VolumeStatusEvent]
+ AWS.EC2.Types: vstVolumeId :: VolumeStatus -> Text
+ AWS.EC2.Types: vstVolumeStatus :: VolumeStatus -> VolumeStatusInfo
- AWS.EC2: describeAddresses :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Text] -> [Filter] -> EC2 m (Source m Address)
+ AWS.EC2: describeAddresses :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Text] -> [Filter] -> EC2 m (ResumableSource m Address)
- AWS.EC2: describeAvailabilityZones :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (Source m AvailabilityZone)
+ AWS.EC2: describeAvailabilityZones :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (ResumableSource m AvailabilityZone)
- AWS.EC2: describeImages :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Text] -> [Text] -> [Filter] -> EC2 m (Source m Image)
+ AWS.EC2: describeImages :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Text] -> [Text] -> [Filter] -> EC2 m (ResumableSource m Image)
- AWS.EC2: describeInstanceStatus :: (MonadResource m, MonadBaseControl IO m) => [Text] -> Bool -> [Filter] -> Maybe Text -> EC2 m (Source m InstanceStatus)
+ AWS.EC2: describeInstanceStatus :: (MonadResource m, MonadBaseControl IO m) => [Text] -> Bool -> [Filter] -> Maybe Text -> EC2 m (ResumableSource m InstanceStatus)
- AWS.EC2: describeInstances :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (Source m Reservation)
+ AWS.EC2: describeInstances :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (ResumableSource m Reservation)
- AWS.EC2: describeKeyPairs :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (Source m KeyPair)
+ AWS.EC2: describeKeyPairs :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (ResumableSource m KeyPair)
- AWS.EC2: describeRegions :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (Source m Region)
+ AWS.EC2: describeRegions :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (ResumableSource m Region)
- AWS.EC2: describeSecurityGroups :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Text] -> [Filter] -> EC2 m (Source m SecurityGroup)
+ AWS.EC2: describeSecurityGroups :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Text] -> [Filter] -> EC2 m (ResumableSource m SecurityGroup)
- AWS.EC2: describeSnapshots :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Text] -> [Text] -> [Filter] -> EC2 m (Source m Snapshot)
+ AWS.EC2: describeSnapshots :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Text] -> [Text] -> [Filter] -> EC2 m (ResumableSource m Snapshot)
- AWS.EC2: describeTags :: (MonadResource m, MonadBaseControl IO m) => [Filter] -> EC2 m (Source m Tag)
+ AWS.EC2: describeTags :: (MonadResource m, MonadBaseControl IO m) => [Filter] -> EC2 m (ResumableSource m Tag)
- AWS.EC2: describeVolumes :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (Source m Volume)
+ AWS.EC2: describeVolumes :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (ResumableSource m Volume)
- AWS.EC2: describeVpnConnections :: (MonadBaseControl IO m, MonadResource m) => [Text] -> [Filter] -> EC2 m (Source m VpnConnection)
+ AWS.EC2: describeVpnConnections :: (MonadBaseControl IO m, MonadResource m) => [Text] -> [Filter] -> EC2 m (ResumableSource m VpnConnection)
- AWS.EC2: startInstances :: (MonadResource m, MonadBaseControl IO m) => [Text] -> EC2 m (Source m InstanceStateChange)
+ AWS.EC2: startInstances :: (MonadResource m, MonadBaseControl IO m) => [Text] -> EC2 m (ResumableSource m InstanceStateChange)
- AWS.EC2: stopInstances :: (MonadResource m, MonadBaseControl IO m) => [Text] -> Bool -> EC2 m (Source m InstanceStateChange)
+ AWS.EC2: stopInstances :: (MonadResource m, MonadBaseControl IO m) => [Text] -> Bool -> EC2 m (ResumableSource m InstanceStateChange)
- AWS.EC2: terminateInstances :: (MonadResource m, MonadBaseControl IO m) => [Text] -> EC2 m (Source m InstanceStateChange)
+ AWS.EC2: terminateInstances :: (MonadResource m, MonadBaseControl IO m) => [Text] -> EC2 m (ResumableSource m InstanceStateChange)
- AWS.EC2.Types: VolAvailable :: VolumeStatus
+ AWS.EC2.Types: VolAvailable :: VolumeState
- AWS.EC2.Types: VolCreating :: VolumeStatus
+ AWS.EC2.Types: VolCreating :: VolumeState
- AWS.EC2.Types: VolDeleted :: VolumeStatus
+ AWS.EC2.Types: VolDeleted :: VolumeState
- AWS.EC2.Types: VolDeleting :: VolumeStatus
+ AWS.EC2.Types: VolDeleting :: VolumeState
- AWS.EC2.Types: VolError :: VolumeStatus
+ AWS.EC2.Types: VolError :: VolumeState
- AWS.EC2.Types: VolInUse :: VolumeStatus
+ AWS.EC2.Types: VolInUse :: VolumeState
- AWS.EC2.Types: Volume :: Text -> Int -> Maybe Text -> Text -> VolumeStatus -> UTCTime -> [Attachment] -> [ResourceTag] -> VolumeType -> Volume
+ AWS.EC2.Types: Volume :: Text -> Int -> Maybe Text -> Text -> VolumeState -> UTCTime -> [Attachment] -> [ResourceTag] -> VolumeType -> Volume
- AWS.EC2.Types: volStatus :: Volume -> VolumeStatus
+ AWS.EC2.Types: volStatus :: Volume -> VolumeState
- AWS.EC2.Util: asList :: Monad m => EC2 m (Source m a) -> EC2 m [a]
+ AWS.EC2.Util: asList :: Monad m => EC2 m (ResumableSource m a) -> EC2 m [a]
- AWS.EC2.Util: each :: Monad m => EC2 m (Source m a) -> (a -> m b) -> EC2 m ()
+ AWS.EC2.Util: each :: Monad m => (a -> m b) -> EC2 m (ResumableSource m a) -> EC2 m ()
- AWS.EC2.Util: head :: Monad m => EC2 m (Source m a) -> EC2 m (Maybe a)
+ AWS.EC2.Util: head :: Monad m => EC2 m (ResumableSource m a) -> EC2 m (Maybe a)
Files
- AWS/EC2.hs +6/−0
- AWS/EC2/Acl.hs +165/−0
- AWS/EC2/Address.hs +1/−1
- AWS/EC2/AvailabilityZone.hs +1/−1
- AWS/EC2/Image.hs +1/−1
- AWS/EC2/Instance.hs +5/−5
- AWS/EC2/Internal.hs +33/−1
- AWS/EC2/KeyPair.hs +1/−1
- AWS/EC2/Query.hs +18/−17
- AWS/EC2/Region.hs +1/−1
- AWS/EC2/RouteTable.hs +133/−0
- AWS/EC2/SecurityGroup.hs +1/−1
- AWS/EC2/Snapshot.hs +1/−1
- AWS/EC2/Subnets.hs +77/−0
- AWS/EC2/Tag.hs +1/−1
- AWS/EC2/Types.hs +197/−2
- AWS/EC2/Util.hs +13/−18
- AWS/EC2/VPC.hs +1/−1
- AWS/EC2/Volume.hs +96/−2
- aws-sdk.cabal +4/−2
AWS/EC2.hs view
@@ -27,6 +27,9 @@ , module AWS.EC2.Tag -- * VPC , module AWS.EC2.VPC+ , module AWS.EC2.Subnets+ , module AWS.EC2.Acl+ , module AWS.EC2.RouteTable ) where import Data.Conduit@@ -51,6 +54,9 @@ import AWS.EC2.KeyPair import AWS.EC2.SecurityGroup import AWS.EC2.VPC+import AWS.EC2.Subnets+import AWS.EC2.Acl+import AWS.EC2.RouteTable -- | set endpoint to EC2 context. setRegion
+ AWS/EC2/Acl.hs view
@@ -0,0 +1,165 @@+{-# LANGUAGE FlexibleContexts, RankNTypes #-}++module AWS.EC2.Acl+ ( describeNetworkAcls+ , createNetworkAcl+ , deleteNetworkAcl+ , replaceNetworkAclAssociation+ , createNetworkAclEntry+ , deleteNetworkAclEntry+ , replaceNetworkAclEntry+ ) 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.Internal+import AWS.EC2.Types+import AWS.EC2.Query+import AWS.Lib.Parser+import AWS.Util++describeNetworkAcls+ :: (MonadResource m, MonadBaseControl IO m)+ => [Text] -- ^ NetworkAclId+ -> [Filter] -- ^ Filters+ -> EC2 m (ResumableSource m NetworkAcl)+describeNetworkAcls nids filters = do+ ec2QuerySource "DescribeNetworkAcls" params $+ itemConduit "networkAclSet" networkAclSink+ where+ params =+ [ ArrayParams "NetworkAclId" nids+ , FilterParams filters+ ]++networkAclSink :: MonadThrow m+ => GLSink Event m NetworkAcl+networkAclSink = NetworkAcl+ <$> getT "networkAclId"+ <*> getT "vpcId"+ <*> getF "default" textToBool+ <*> itemsSet "entrySet" (NetworkAclEntry+ <$> getF "ruleNumber" textToInt+ <*> getF "protocol" textToInt+ <*> getF "ruleAction" networkAclRuleAction+ <*> getF "egress" textToBool+ <*> getT "cidrBlock"+ <*> elementM "icmpTypeCode" (IcmpTypeCode+ <$> getF "code" textToInt+ <*> getF "type" textToInt+ )+ <*> elementM "portRange" (PortRange+ <$> getF "from" textToInt+ <*> getF "to" textToInt))+ <*> itemsSet "associationSet" (NetworkAclAssociation+ <$> getT "networkAclAssociationId"+ <*> getT "networkAclId"+ <*> getT "subnetId"+ )+ <*> resourceTagSink++createNetworkAcl+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ VpcId+ -> EC2 m NetworkAcl+createNetworkAcl vpcid =+ ec2Query "CreateNetworkAcl" params $+ element "networkAcl" networkAclSink+ where+ params = [ValueParam "VpcId" vpcid]++deleteNetworkAcl+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ NetworkAclId+ -> EC2 m Bool+deleteNetworkAcl aclid =+ ec2Query "DeleteNetworkAcl" params returnBool+ where+ params = [ValueParam "NetworkAclId" aclid]++replaceNetworkAclAssociation+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ AssociationId+ -> Text -- ^ NetworkAclId+ -> EC2 m Text+replaceNetworkAclAssociation assoc aclid =+ ec2Query "ReplaceNetworkAclAssociation" params $+ getT "newAssociationId"+ where+ params =+ [ ValueParam "AssociationId" assoc+ , ValueParam "NetworkAclId" aclid+ ]++createNetworkAclEntry+ :: (MonadResource m, MonadBaseControl IO m)+ => NetworkAclEntryRequest+ -> EC2 m Bool+createNetworkAclEntry req =+ ec2Query "CreateNetworkAclEntry" params returnBool+ where+ params = reqToParams req++reqToParams :: NetworkAclEntryRequest -> [QueryParam]+reqToParams req =+ [ ValueParam "NetworkAclId" $+ networkAclEntryRequestNetworkAclId req+ , ValueParam "RuleNumber" $+ toText $ networkAclEntryRequestRuleNumber req+ , ValueParam "Protocol" $+ toText $ networkAclEntryRequestProtocol req+ , ValueParam "RuleAction" $+ ruleToText $ networkAclEntryRequestRuleAction req+ , ValueParam "CidrBlock" $+ networkAclEntryRequestCidrBlock req+ , ValueParam "Egress" $+ boolToText $ networkAclEntryRequestEgress req+ ] ++ maybeParams+ [ ("Icmp.Code",+ toText+ <$> icmpTypeCodeCode+ <$> networkAclEntryRequestIcmp req)+ , ("Icmp.Type",+ toText+ <$> icmpTypeCodeType+ <$> networkAclEntryRequestIcmp req)+ , ("PortRange.From",+ toText+ <$> portRangeFrom+ <$> networkAclEntryRequestPortRange req)+ , ("PortRange.To",+ toText+ <$> portRangeTo+ <$> networkAclEntryRequestPortRange req)+ ]+ where+ ruleToText NetworkAclRuleActionAllow = "allow"+ ruleToText NetworkAclRuleActionDeny = "deny"++deleteNetworkAclEntry+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ NetworkAclId+ -> Int -- ^ RuleNumber+ -> Bool -- ^ Egress+ -> EC2 m Bool+deleteNetworkAclEntry aclid rule egress =+ ec2Query "DeleteNetworkAclEntry" params returnBool+ where+ params =+ [ ValueParam "NetworkAclId" aclid+ , ValueParam "RuleNumber" $ toText rule+ , ValueParam "Egress" $ boolToText egress+ ]++replaceNetworkAclEntry+ :: (MonadResource m, MonadBaseControl IO m)+ => NetworkAclEntryRequest+ -> EC2 m Bool+replaceNetworkAclEntry req =+ ec2Query "ReplaceNetworkAclEntry" params returnBool+ where+ params = reqToParams req
AWS/EC2/Address.hs view
@@ -31,7 +31,7 @@ => [Text] -- ^ PublicIps -> [Text] -- ^ AllocationIds -> [Filter] -- ^ Filters- -> EC2 m (Source m Address)+ -> EC2 m (ResumableSource m Address) describeAddresses pubIps alloIds filters = ec2QuerySource "DescribeAddresses" params addressSet where params =
AWS/EC2/AvailabilityZone.hs view
@@ -20,7 +20,7 @@ :: (MonadResource m, MonadBaseControl IO m) => [Text] -- ^ ZoneNames -> [Filter] -- ^ Filters- -> EC2 m (Source m AvailabilityZone)+ -> EC2 m (ResumableSource m AvailabilityZone) describeAvailabilityZones zones filters = ec2QuerySource "DescribeAvailabilityZones" params availabilityZoneInfo where
AWS/EC2/Image.hs view
@@ -27,7 +27,7 @@ -> [Text] -- ^ Owners (User Ids) -> [Text] -- ^ ExecutedBy (User Ids) -> [Filter] -- ^ Filers- -> EC2 m (Source m Image)+ -> EC2 m (ResumableSource m Image) describeImages imageIds owners execby filters = ec2QuerySource "DescribeImages" params $ itemConduit "imagesSet" imageItem -- ec2QueryDebug "DescribeImages" params
AWS/EC2/Instance.hs view
@@ -38,7 +38,7 @@ :: (MonadResource m, MonadBaseControl IO m) => [Text] -- ^ InstanceIds -> [Filter] -- ^ Filters- -> EC2 m (Source m Reservation)+ -> EC2 m (ResumableSource m Reservation) describeInstances instances filters = do ec2QuerySource "DescribeInstances" params $ itemConduit "reservationSet" reservationSink@@ -181,7 +181,7 @@ -> Bool -- ^ is all instance? 'False': running instance only. -> [Filter] -- ^ Filters -> Maybe Text -- ^ next token- -> EC2 m (Source m InstanceStatus)+ -> EC2 m (ResumableSource m InstanceStatus) describeInstanceStatus instanceIds isAll filters token = ec2QuerySource' "DescribeInstanceStatus" params token instanceStatusSet where@@ -227,7 +227,7 @@ startInstances :: (MonadResource m, MonadBaseControl IO m) => [Text] -- ^ InstanceIds- -> EC2 m (Source m InstanceStateChange)+ -> EC2 m (ResumableSource m InstanceStateChange) startInstances instanceIds = ec2QuerySource "StartInstances" params instanceStateChangeSet where@@ -249,7 +249,7 @@ :: (MonadResource m, MonadBaseControl IO m) => [Text] -- ^ InstanceIds -> Bool -- ^ Force- -> EC2 m (Source m InstanceStateChange)+ -> EC2 m (ResumableSource m InstanceStateChange) stopInstances instanceIds force = ec2QuerySource "StopInstances" params instanceStateChangeSet where@@ -275,7 +275,7 @@ terminateInstances :: (MonadResource m, MonadBaseControl IO m) => [Text] -- ^ InstanceIds- -> EC2 m (Source m InstanceStateChange)+ -> EC2 m (ResumableSource m InstanceStateChange) terminateInstances instanceIds = ec2QuerySource "TerminateInstances" params instanceStateChangeSet
AWS/EC2/Internal.hs view
@@ -185,7 +185,7 @@ | t == "error" = SSError | otherwise = err "snapshot status" t -volumeStatus :: Text -> VolumeStatus+volumeStatus :: Text -> VolumeState volumeStatus t | t == "creating" = VolCreating | t == "available" = VolAvailable@@ -241,3 +241,35 @@ instanceLifecycle (Just t) | t == "spot" = LifecycleSpot | otherwise = err "lifecycle" t++subnetState :: Text -> SubnetState+subnetState t+ | t == "pending" = SubnetPending+ | t == "available" = SubnetAvailable+ | otherwise = err "subnet state" t++volumeStatusInfoStatus :: Text -> VolumeStatusInfoStatus+volumeStatusInfoStatus t+ | t == "ok" = VSIOK+ | t == "impaired" = VSIImpaired+ | t == "insufficient-data" = VSIInsufficientData+ | otherwise = err "VolumeStatusInfo Status" t++networkAclRuleAction :: Text -> NetworkAclRuleAction+networkAclRuleAction t+ | t == "allow" = NetworkAclRuleActionAllow+ | t == "deny" = NetworkAclRuleActionDeny+ | otherwise = err "network acl rule action" t++routeState :: Text -> RouteState+routeState t+ | t == "active" = RouteStateActive+ | t == "blackhole" = RouteStateBlackhole+ | otherwise = err "Route State" t++routeOrigin :: Text -> RouteOrigin+routeOrigin t+ | t == "CreateRouteTable" = RouteOriginCreateRouteTable+ | t == "CreateRoute" = RouteOriginCreateRoute+ | t == "EnableVgwRoutePropagation" = RouteOriginTableEnableVgwRoutePropagation+ | otherwise = err "Route Origin" t
AWS/EC2/KeyPair.hs view
@@ -24,7 +24,7 @@ :: (MonadResource m, MonadBaseControl IO m) => [Text] -- ^ PublicIps -> [Filter] -- ^ Filters- -> EC2 m (Source m KeyPair)+ -> EC2 m (ResumableSource m KeyPair) describeKeyPairs names filters = ec2QuerySource "DescribeKeyPairs" params $ itemConduit "keySet" keyPairSink
AWS/EC2/Query.hs view
@@ -19,11 +19,13 @@ import Control.Monad.Trans.Control (MonadBaseControl) import qualified Text.XML.Stream.Parse as XmlP import Control.Monad.Trans.Class (lift)+import Control.Monad.IO.Class (MonadIO) import qualified Control.Monad.State as State import qualified Control.Monad.Reader as Reader import Control.Exception.Lifted as E import Data.Text (Text) import Control.Applicative+import Data.Conduit.Internal as CI import AWS.Class import AWS.EC2.Internal@@ -62,48 +64,47 @@ -> EC2 m o ec2Query action params sink = do src <- ec2QuerySource action params $ sink >>= yield- lift (src $$ CL.head) >>= maybe (fail "parse error") return+ lift (src $$+- CL.head) >>= maybe (fail "parse error") return ec2QuerySource :: (MonadResource m, MonadBaseControl IO m) => ByteString -> [QueryParam] -> Conduit Event m o- -> EC2 m (Source m o)+ -> EC2 m (ResumableSource m o) ec2QuerySource action params cond = do ec2QuerySource' action params Nothing cond +($=+) :: MonadIO m+ => ResumableSource m a+ -> Conduit a m b+ -> m (ResumableSource m b)+a $=+ b = do+ (sa, fa) <- unwrapResumable a+ return $ CI.ResumableSource (sa $= b) fa+ ec2QuerySource' :: (MonadResource m, MonadBaseControl IO m) => ByteString -> [QueryParam] -> Maybe Text -> Conduit Event m o- -> EC2 m (Source m o)+ -> EC2 m (ResumableSource m o) ec2QuerySource' action params token cond = do cred <- Reader.ask ctx <- State.get (src1, rid) <- lift $ do response <- requestQuery cred ctx action params' ec2Version sinkError- (res, _) <- unwrapResumable response--- res $$ CB.sinkFile "debug.txt" >>= fail "debug"- res $= XmlP.parseBytes XmlP.def $$+ sinkRequestId+ res <- response $=+ XmlP.parseBytes XmlP.def+ res $$++ sinkRequestId State.put ctx{lastRequestId = Just rid}- lift $ do- (src2, _) <- unwrapResumable src1- return $ src2 $= (cond >> nextToken)+ lift $ src1 $=+ (cond >> nextToken) where params' = maybe params (\t -> ValueParam "NextToken" t:params) token - nextToken- :: (MonadResource m, MonadBaseControl IO m)- => Conduit Event m o- nextToken = do- mt <- getMT "nextToken"- case mt of- Nothing -> return ()- Just t -> E.throw $ NextToken t+nextToken :: MonadThrow m => Conduit Event m o+nextToken = getMT "nextToken" >>= maybe (return ()) (E.throw . NextToken) #ifdef DEBUG ec2QueryDebug
AWS/EC2/Region.hs view
@@ -20,7 +20,7 @@ :: (MonadResource m, MonadBaseControl IO m) => [Text] -- ^ RegionNames -> [Filter] -- ^ Filters- -> EC2 m (Source m Region)+ -> EC2 m (ResumableSource m Region) describeRegions regions filters = ec2QuerySource "DescribeRegions" params regionInfoConduit where
+ AWS/EC2/RouteTable.hs view
@@ -0,0 +1,133 @@+{-# LANGUAGE FlexibleContexts, RankNTypes #-}++module AWS.EC2.RouteTable+ ( associateRouteTable+ , createRouteTable+ , deleteRouteTable+ , describeRouteTables+ , disassociateRouteTable+ , replaceRouteTableAssociation+ ) 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.Internal+import AWS.EC2.Types+import AWS.EC2.Query+import AWS.Lib.Parser+import AWS.Util++------------------------------------------------------------+-- describeRouteTables+------------------------------------------------------------+describeRouteTables+ :: (MonadResource m, MonadBaseControl IO m)+ => [Text] -- ^ RouteTableIds+ -> [Filter] -- ^ Filters+ -> EC2 m (ResumableSource m RouteTable)+describeRouteTables routeTables filters = do+ ec2QuerySource "DescribeRouteTables" params $+ itemConduit "routeTableSet" routeTableSink+ where+ params =+ [ ArrayParams "RouteTableId" routeTables+ , FilterParams filters+ ]++routeTableSink :: MonadThrow m+ => GLSink Event m RouteTable+routeTableSink = RouteTable+ <$> getT "routeTableId"+ <*> getT "vpcId"+ <*> routeSink+ <*> routeTableAssociationSink+ <*> getMT "propagatingVgwSet"+ <*> resourceTagSink++routeSink :: MonadThrow m+ => GLSink Event m [Route]+routeSink = itemsSet "routeSet" $ Route+ <$> getT "destinationCidrBlock"+ <*> getMT "gatewayId"+ <*> getMT "instanceId"+ <*> getMT "instanceOwnerId"+ <*> getMT "networkInterfaceId"+ <*> getF "state" routeState+ <*> getM "origin" (routeOrigin <$>)++routeTableAssociationSink :: MonadThrow m+ => GLSink Event m [RouteTableAssociation]+routeTableAssociationSink = itemsSet "associationSet" $ RouteTableAssociation+ <$> getT "routeTableAssociationId"+ <*> getT "routeTableId"+ <*> getMT "subnetId"+ <*> getM "main" (textToBool <$>)++------------------------------------------------------------+-- createRouteTable+------------------------------------------------------------+createRouteTable+ :: (MonadResource m, MonadBaseControl IO m)+ => Text+ -> EC2 m RouteTable+createRouteTable vid =+ ec2Query "CreateRouteTable" [ValueParam "VpcId" vid] $+ element "routeTable" routeTableSink++------------------------------------------------------------+-- deleteRouteTable+------------------------------------------------------------+deleteRouteTable+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ RouteTableId+ -> EC2 m Bool+deleteRouteTable rtid =+ ec2Query "DeleteRouteTable" [ValueParam "RouteTableId" rtid]+ $ getF "return" textToBool++------------------------------------------------------------+-- associateRouteTable+------------------------------------------------------------+associateRouteTable+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ RouteTableId+ -> Text -- ^ SubnetId+ -> EC2 m Text -- ^ associationId+associateRouteTable rtid sid =+ ec2Query "AssociateRouteTable" params+ $ getT "associationId"+ where+ params = [ ValueParam "RouteTableId" rtid+ , ValueParam "SubnetId" sid+ ]++------------------------------------------------------------+-- disassociateRouteTable+------------------------------------------------------------+disassociateRouteTable+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ AssociationId+ -> EC2 m Bool -- ^ return+disassociateRouteTable aid =+ ec2Query "DisassociateRouteTable" [ValueParam "AssociationId" aid]+ $ getF "return" textToBool++------------------------------------------------------------+-- replaceRouteTableAssociation+------------------------------------------------------------+replaceRouteTableAssociation+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ AssociationId+ -> Text -- ^ RouteTableId+ -> EC2 m Text -- ^ newAssociationId+replaceRouteTableAssociation aid rtid =+ ec2Query "ReplaceRouteTableAssociation" params+ $ getT "newAssociationId"+ where+ params = [ ValueParam "AssociationId" aid+ , ValueParam "RouteTableId" rtid+ ]
AWS/EC2/SecurityGroup.hs view
@@ -30,7 +30,7 @@ => [Text] -- ^ GroupNames -> [Text] -- ^ GroupIds -> [Filter] -- ^ Filters- -> EC2 m (Source m SecurityGroup)+ -> EC2 m (ResumableSource m SecurityGroup) describeSecurityGroups names ids filters = ec2QuerySource "DescribeSecurityGroups" params $ itemConduit "securityGroupInfo" $
AWS/EC2/Snapshot.hs view
@@ -25,7 +25,7 @@ -> [Text] -- ^ Owners (UserId) -> [Text] -- ^ RestorableBy (UserId) -> [Filter] -- ^ Filters- -> EC2 m (Source m Snapshot)+ -> EC2 m (ResumableSource m Snapshot) describeSnapshots ssids owners restby filters = ec2QuerySource "DescribeSnapshots" params $ itemConduit "snapshotSet" snapshotSink
+ AWS/EC2/Subnets.hs view
@@ -0,0 +1,77 @@+{-# LANGUAGE FlexibleContexts, RankNTypes #-}++module AWS.EC2.Subnets+ ( describeSubnets+ , createSubnet+ , deleteSubnet+ ) 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.Internal+import AWS.EC2.Types+import AWS.EC2.Query+import AWS.Lib.Parser+import AWS.Util++------------------------------------------------------------+-- DescribeSubnets+------------------------------------------------------------+describeSubnets+ :: (MonadResource m, MonadBaseControl IO m)+ => [Text] -- ^ SubnetIds+ -> [Filter] -- ^ Filters+ -> EC2 m (ResumableSource m Subnet)+describeSubnets subnets filters = do+ ec2QuerySource "DescribeSubnets" params $+ itemConduit "subnetSet" subnetSink+ where+ params =+ [ ArrayParams "SubnetId" subnets+ , FilterParams filters+ ]++subnetSink :: MonadThrow m+ => GLSink Event m Subnet+subnetSink = Subnet+ <$> getT "subnetId"+ <*> getF "state" subnetState+ <*> getT "vpcId"+ <*> getT "cidrBlock"+ <*> getF "availableIpAddressCount" textToInt+ <*> getT "availabilityZone"+ <*> resourceTagSink++------------------------------------------------------------+-- CreateSubnet+------------------------------------------------------------+createSubnet+ :: (MonadResource m, MonadBaseControl IO m)+ => CreateSubnetRequest+ -> EC2 m Subnet+createSubnet param =+ ec2Query "CreateSubnet" param' $+ element "subnet" subnetSink+ where+ param' = createSubnetParam param++createSubnetParam :: CreateSubnetRequest -> [QueryParam]+createSubnetParam (CreateSubnetRequest vid cidr zone) =+ [ ValueParam "VpcId" vid+ , ValueParam "CidrBlock" cidr+ ] ++ maybe [] (\a -> [ValueParam "AvailabilityZone" a]) zone++------------------------------------------------------------+-- DeleteSubnet+------------------------------------------------------------+deleteSubnet+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ SubnetId+ -> EC2 m Bool+deleteSubnet sid =+ ec2Query "DeleteSubnet" [ValueParam "SubnetId" sid]+ $ getF "return" textToBool
AWS/EC2/Tag.hs view
@@ -21,7 +21,7 @@ describeTags :: (MonadResource m, MonadBaseControl IO m) => [Filter] -- ^ Filters- -> EC2 m (Source m Tag)+ -> EC2 m (ResumableSource m Tag) describeTags filters = ec2QuerySource "DescribeTags" params $ itemConduit "tagSet" $ Tag
AWS/EC2/Types.hs view
@@ -11,6 +11,7 @@ , BlockDeviceMapping(..) , BlockDeviceMappingParam(..) , ConsoleOutput(..)+ , CreateSubnetRequest(..) , CreateVolumeRequest(..) , DisassociateAddressRequest(..) , EbsBlockDevice(..)@@ -19,6 +20,7 @@ , Group(..) , Hypervisor(..) , IamInstanceProfile(..)+ , IcmpTypeCode(..) , Image(..) , ImageState(..) , ImageType(..)@@ -45,12 +47,18 @@ , IpRange(..) , KeyPair(..) , ModifyInstanceAttributeRequest(..)+ , NetworkAcl(..)+ , NetworkAclAssociation(..)+ , NetworkAclEntry(..)+ , NetworkAclEntryRequest(..)+ , NetworkAclRuleAction(..) , NetworkInterfaceAssociation(..) , NetworkInterfaceAttachment(..) , NetworkInterfaceParam(..) , PasswordData(..) , Placement(..) , Platform(..)+ , PortRange(..) , ProductCode(..) , ProductCodeType(..) , Region(..)@@ -59,6 +67,11 @@ , ResetInstanceAttributeRequest(..) , ResourceTag(..) , RootDeviceType(..)+ , Route(..)+ , RouteTable(..)+ , RouteTableAssociation(..)+ , RouteState(..)+ , RouteOrigin(..) , RunInstancesRequest(..) , SecurityGroup(..) , SecurityGroupRequest(..)@@ -66,12 +79,22 @@ , Snapshot(..) , SnapshotStatus(..) , StateReason(..)+ , Subnet(..)+ , SubnetState(..) , Tag(..) , UserIdGroupPair(..) , VirtualizationType(..) , Volume(..)+ , VolumeAttribute(..)+ , VolumeAttributeRequest(..) , VolumeType(..)+ , VolumeState(..) , VolumeStatus(..)+ , VolumeStatusAction(..)+ , VolumeStatusEvent(..)+ , VolumeStatusDetail(..)+ , VolumeStatusInfo(..)+ , VolumeStatusInfoStatus(..) , VpnConnection(..) , VpnConnectionOptionsRequest(..) , VpnConnectionState(..)@@ -490,7 +513,7 @@ , volSize :: Int , volSnapshotId :: Maybe Text , volAvailabilityZone :: Text- , volStatus :: VolumeStatus+ , volStatus :: VolumeState , volCreateTime :: UTCTime , volAttachmentSet :: [Attachment] , volTagSet :: [ResourceTag]@@ -498,7 +521,7 @@ } deriving (Show, Eq) -data VolumeStatus+data VolumeState = VolCreating | VolAvailable | VolInUse@@ -763,3 +786,175 @@ data SecurityGroupRequest = GroupId Text | GroupName Text deriving (Show, Eq)++data Subnet = Subnet+ { snSubnetId :: Text+ , snState :: SubnetState+ , snVpicId :: Text+ , snCidrBlock :: Text+ , snAvailableIpAddressCount :: Int+ , snCAvailabilityZone :: Text+ , snTagSet :: [ResourceTag]+ }+ deriving (Show, Eq)++data SubnetState = SubnetPending | SubnetAvailable+ deriving (Show, Eq)++data CreateSubnetRequest = CreateSubnetRequest+ { csrVpcId :: Text+ , csrCidrBlock :: Text+ , csrAvailabilityZone :: Maybe Text+ }+ deriving (Show, Eq)++data VolumeStatus = VolumeStatus+ { vstVolumeId :: Text+ , vstAvailabilityZone :: Text+ , vstVolumeStatus :: VolumeStatusInfo+ , vstEventSet :: [VolumeStatusEvent]+ , vstActionSet :: [VolumeStatusAction]+ }+ deriving (Show, Eq)++data VolumeStatusInfo = VolumeStatusInfo+ { vsiStatus :: VolumeStatusInfoStatus+ , vsiDetails :: [VolumeStatusDetail]+ }+ deriving (Show, Eq)++data VolumeStatusInfoStatus+ = VSIOK+ | VSIImpaired+ | VSIInsufficientData+ deriving (Show, Eq)++data VolumeStatusDetail = VolumeStatusDetail+ { vsdName :: Text+ , vsdStatus :: Text+ }+ deriving (Show, Eq)++data VolumeStatusEvent = VolumeStatusEvent+ { vseEventType :: Text+ , vseEventId :: Text+ , vseDescription :: Text+ , vseNotBefore :: Maybe UTCTime+ , vseNotAfter :: Maybe UTCTime+ }+ deriving (Show, Eq)++data VolumeStatusAction = VolumeStatusAction+ { vsaCode :: Text+ , vsaEventType :: Text+ , vsaEventId :: Text+ , vsaDescription :: Text+ }+ deriving (Show, Eq)++data VolumeAttribute+ = VAAutoEnableIO Bool+ | VAProductCodes [ProductCode]+ deriving (Show, Eq)++data VolumeAttributeRequest+ = VARAutoEnableIO+ | VARProductCodes+ deriving (Show, Eq)++data NetworkAcl = NetworkAcl+ { networkAclId :: Text+ , networkAclVpcId :: Text+ , networkAclDefault :: Bool+ , networkAclEntrySet :: [NetworkAclEntry]+ , networkAclAssociationSet :: [NetworkAclAssociation]+ , networkAclTagSet :: [ResourceTag]+ }+ deriving (Show, Eq)++data NetworkAclEntry = NetworkAclEntry+ { networkAclEntryRuleNumber :: Int+ , networkAclEntryProtocol :: Int+ , networkAclEntryRuleAction :: NetworkAclRuleAction+ , networkAclEntryEgress :: Bool+ , networkAclEntryCidrBlock :: Text+ , networkAclEntryIcmpTypeCode :: Maybe IcmpTypeCode+ , networkAclEntryPortRange :: Maybe PortRange+ }+ deriving (Show, Eq)++data NetworkAclRuleAction+ = NetworkAclRuleActionAllow+ | NetworkAclRuleActionDeny+ deriving (Show, Eq)++data IcmpTypeCode = IcmpTypeCode+ { icmpTypeCodeCode :: Int+ , icmpTypeCodeType :: Int+ }+ deriving (Show, Eq)++data PortRange = PortRange+ { portRangeFrom :: Int+ , portRangeTo :: Int+ }+ deriving (Show, Eq)++data NetworkAclAssociation = NetworkAclAssociation+ { networkAclAssociationId :: Text+ , networkAclAssociationNetworkAclId :: Text+ , networkAclAssociationSubnetId :: Text+ }+ deriving (Show, Eq)++data NetworkAclEntryRequest = NetworkAclEntryRequest+ { networkAclEntryRequestNetworkAclId :: Text+ , networkAclEntryRequestRuleNumber :: Int+ , networkAclEntryRequestProtocol :: Int -- ^ Protocol Number <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml>+ , networkAclEntryRequestRuleAction :: NetworkAclRuleAction+ , networkAclEntryRequestEgress :: Bool+ , networkAclEntryRequestCidrBlock :: Text+ , networkAclEntryRequestIcmp :: Maybe IcmpTypeCode+ , networkAclEntryRequestPortRange :: Maybe PortRange+ }+ deriving (Show, Eq)++data RouteTable = RouteTable+ { rtRouteTableId :: Text+ , rtVpcId :: Text+ , rtRouteSet :: [Route]+ , rtAssociationSet :: [RouteTableAssociation]+ , rtPropagatingVgw :: Maybe PropagatingVgw+ , rtTagSet :: [ResourceTag]+ }+ deriving (Show, Eq)++data Route = Route+ { rDestinationCidrBlock :: Text+ , rGatewayId :: Maybe Text+ , rInstanceId :: Maybe Text+ , rInstanceOwnerId :: Maybe Text+ , rNetworkInterfaceId :: Maybe Text+ , rState :: RouteState+ , rOrigin :: Maybe RouteOrigin+ }+ deriving (Show, Eq)++data RouteState = RouteStateActive | RouteStateBlackhole+ deriving (Show, Eq)++data RouteOrigin+ = RouteOriginCreateRouteTable+ | RouteOriginCreateRoute+ | RouteOriginTableEnableVgwRoutePropagation+ deriving (Show, Eq)++data RouteTableAssociation = RouteTableAssociation+ { rtaRouteTableAssociationId :: Text+ , rtaRouteTableId :: Text+ , rtaSubnetId :: Maybe Text+ , rtaMain :: Maybe Bool+ }+ deriving (Show, Eq)++type PropagatingVgw = Text
AWS/EC2/Util.hs view
@@ -9,7 +9,7 @@ import Data.Conduit import qualified Data.Conduit.List as CL-import Control.Monad.Trans.Class (lift)+import Control.Monad.Trans.Class (MonadTrans, lift) import Prelude hiding (head) import Safe import qualified Control.Concurrent as CC@@ -22,40 +22,35 @@ asList :: Monad m- => EC2 m (Source m a)+ => EC2 m (ResumableSource m a) -> EC2 m [a] asList src = do s <- src- lift $ s $$ CL.consume+ lift $ s $$+- CL.consume head :: Monad m- => EC2 m (Source m a)+ => EC2 m (ResumableSource m a) -> EC2 m (Maybe a) head src = do s <- src- lift $ s $$ CL.head+ lift $ s $$+- CL.head each :: Monad m- => EC2 m (Source m a)- -> (a -> m b)+ => (a -> m b)+ -> EC2 m (ResumableSource m a) -> EC2 m ()-each src f = do- s <- src- (rsrc, _) <- lift $ s $$+ CL.take 0- lift $ each' rsrc f+each f res = res >>= lift . each' f each' :: Monad m- => ResumableSource m a- -> (a -> m b)+ => (a -> m b)+ -> ResumableSource m a -> m ()-each' rsrc f = do+each' f rsrc = do (s', ma) <- rsrc $$++ CL.head- case ma of- Nothing -> return ()- Just a -> f a >> each' s' f+ maybe (return ()) (\a -> f a >> each' f s') ma -- | Wait for condition. --@@ -78,7 +73,7 @@ wait f g rid = do mr <- headMay <$> g rid case mr of- Nothing -> fail $ "Resource not found: " ++ T.unpack rid+ Nothing -> fail $ "Resource not found: " ++ T.unpack rid Just r -> if f r then return r else do
AWS/EC2/VPC.hs view
@@ -23,7 +23,7 @@ :: (MonadBaseControl IO m, MonadResource m) => [Text] -- ^ VpnConnectionIds -> [Filter]- -> EC2 m (Source m VpnConnection)+ -> EC2 m (ResumableSource m VpnConnection) describeVpnConnections ids filters = ec2QuerySource "DescribeVpnConnections" params vpnConnectionConduit where
AWS/EC2/Volume.hs view
@@ -1,10 +1,14 @@-{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleContexts, RankNTypes #-} module AWS.EC2.Volume ( describeVolumes , createVolume , deleteVolume , attachVolume , detachVolume+ , describeVolumeStatus+ , enableVolumeIO+ , describeVolumeAttribute+ , modifyVolumeAttribute ) where import Data.Text (Text) @@ -23,7 +27,7 @@ :: (MonadResource m, MonadBaseControl IO m) => [Text] -- ^ VolumeIds -> [Filter] -- ^ Filters- -> EC2 m (Source m Volume)+ -> EC2 m (ResumableSource m Volume) describeVolumes vids filters = ec2QuerySource "DescribeVolumes" params $ itemConduit "volumeSet" volumeSink@@ -122,3 +126,93 @@ , ("Device", dev) , ("Force", toText <$> force) ]++describeVolumeStatus+ :: (MonadResource m, MonadBaseControl IO m)+ => [Text] -- ^ VolumeId+ -> [Filter] -- ^ Filters+ -> Maybe Text -- ^ next token+ -> EC2 m (ResumableSource m VolumeStatus)+describeVolumeStatus vids filters token =+ ec2QuerySource' "DescribeVolumeStatus" params token $+ itemConduit "volumeStatusSet" $ volumeStatusSink+ where+ params =+ [ ArrayParams "VolumeId" vids+ , FilterParams filters+ ]++volumeStatusSink :: MonadThrow m+ => GLSink Event m VolumeStatus+volumeStatusSink = VolumeStatus+ <$> getT "volumeId"+ <*> getT "availabilityZone"+ <*> element "volumeStatus" (VolumeStatusInfo+ <$> getF "status" volumeStatusInfoStatus+ <*> itemsSet "details" (VolumeStatusDetail+ <$> getT "name"+ <*> getT "status"+ )+ )+ <*> itemsSet "eventsSet" (VolumeStatusEvent+ <$> getT "eventType"+ <*> getT "eventId"+ <*> getT "description"+ <*> getM "notBefore" (textToTime <$>)+ <*> getM "notAfter" (textToTime <$>)+ )+ <*> itemsSet "actionsSet" (VolumeStatusAction+ <$> getT "code"+ <*> getT "eventType"+ <*> getT "eventId"+ <*> getT "description"+ )++modifyVolumeAttribute+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ VolumeId+ -> Bool -- ^ AutoEnableIO+ -> EC2 m Bool+modifyVolumeAttribute vid enable =+ ec2Query "ModifyVolumeAttribute" params returnBool+ where+ params =+ [ ValueParam "VolumeId" vid+ , ValueParam "AutoEnableIO.Value" $ boolToText enable+ ]++enableVolumeIO+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ VolumeId+ -> EC2 m Bool+enableVolumeIO vid =+ ec2Query "EnableVolumeIO" params returnBool+ where+ params = [ValueParam "VolumeId" vid]++-- | return (volumeId, Attribute)+describeVolumeAttribute+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ VolumeId+ -> VolumeAttributeRequest+ -> EC2 m (Text, VolumeAttribute)+describeVolumeAttribute vid attr =+ ec2Query "DescribeVolumeAttribute" params $ (,)+ <$> getT "volumeId"+ <*> volumeAttributeSink attr+ where+ params =+ [ ValueParam "VolumeId" vid+ , ValueParam "Attribute" $ s attr+ ]+ s VARAutoEnableIO = "autoEnableIO"+ s VARProductCodes = "productCodes"++volumeAttributeSink+ :: MonadThrow m+ => VolumeAttributeRequest+ -> GLSink Event m VolumeAttribute+volumeAttributeSink VARAutoEnableIO =+ VAAutoEnableIO <$> getF "autoEnableIO" textToBool+volumeAttributeSink VARProductCodes =+ VAProductCodes <$> productCodeSink
aws-sdk.cabal view
@@ -1,5 +1,5 @@ name: aws-sdk-version: 0.4.3.0+version: 0.5.0.0 synopsis: AWS SDK for Haskell description: An AWS(Amazon Web Services) liblary for Haskell. license: BSD3@@ -32,11 +32,14 @@ , AWS.EC2.Instance , AWS.EC2.Volume , AWS.EC2.KeyPair+ , AWS.EC2.RouteTable , AWS.EC2.Snapshot , AWS.EC2.SecurityGroup+ , AWS.EC2.Subnets , AWS.EC2.Query , AWS.EC2.Region , AWS.EC2.VPC+ , AWS.EC2.Acl , AWS.EC2.Tag , AWS.EC2.Params , AWS.Lib.Parser@@ -85,4 +88,3 @@ source-repository head type: git location: git://github.com/worksap-ate/aws-sdk.git-