aws-sdk 0.9.0.0 → 0.9.1.0
raw patch · 9 files changed
+146/−11 lines, 9 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ AWS.EC2: createPlacementGroup :: (MonadResource m, MonadBaseControl IO m) => Text -> PlacementGroupStrategy -> EC2 m Bool
+ AWS.EC2: deletePlacementGroup :: (MonadResource m, MonadBaseControl IO m) => Text -> EC2 m Bool
+ AWS.EC2: describePlacementGroups :: (MonadResource m, MonadBaseControl IO m) => [Text] -> [Filter] -> EC2 m (ResumableSource m PlacementGroup)
+ AWS.EC2: monitorInstances :: (MonadResource m, MonadBaseControl IO m) => [Text] -> EC2 m (ResumableSource m MonitorInstancesResponse)
+ AWS.EC2: unmonitorInstances :: (MonadResource m, MonadBaseControl IO m) => [Text] -> EC2 m (ResumableSource m MonitorInstancesResponse)
+ AWS.EC2.Types: MonitorInstancesResponse :: Text -> InstanceMonitoringState -> MonitorInstancesResponse
+ AWS.EC2.Types: MonitoringDisabling :: InstanceMonitoringState
+ AWS.EC2.Types: PlacementGroup :: Text -> PlacementGroupStrategy -> PlacementGroupState -> PlacementGroup
+ AWS.EC2.Types: PlacementGroupStateAvailable :: PlacementGroupState
+ AWS.EC2.Types: PlacementGroupStateDeleted :: PlacementGroupState
+ AWS.EC2.Types: PlacementGroupStateDeleting :: PlacementGroupState
+ AWS.EC2.Types: PlacementGroupStatePending :: PlacementGroupState
+ AWS.EC2.Types: PlacementGroupStrategyCluster :: PlacementGroupStrategy
+ AWS.EC2.Types: data MonitorInstancesResponse
+ AWS.EC2.Types: data PlacementGroup
+ AWS.EC2.Types: data PlacementGroupState
+ AWS.EC2.Types: data PlacementGroupStrategy
+ AWS.EC2.Types: instance Eq MonitorInstancesResponse
+ AWS.EC2.Types: instance Eq PlacementGroup
+ AWS.EC2.Types: instance Eq PlacementGroupState
+ AWS.EC2.Types: instance Eq PlacementGroupStrategy
+ AWS.EC2.Types: instance FromText PlacementGroupState
+ AWS.EC2.Types: instance FromText PlacementGroupStrategy
+ AWS.EC2.Types: instance Read MonitorInstancesResponse
+ AWS.EC2.Types: instance Read PlacementGroup
+ AWS.EC2.Types: instance Read PlacementGroupState
+ AWS.EC2.Types: instance Read PlacementGroupStrategy
+ AWS.EC2.Types: instance Show MonitorInstancesResponse
+ AWS.EC2.Types: instance Show PlacementGroup
+ AWS.EC2.Types: instance Show PlacementGroupState
+ AWS.EC2.Types: instance Show PlacementGroupStrategy
+ AWS.EC2.Types: instanceNetworkInterfaceAssociationPublicDnsName :: InstanceNetworkInterfaceAssociation -> Maybe Text
+ AWS.EC2.Types: monitorInstancesResponseInstanceId :: MonitorInstancesResponse -> Text
+ AWS.EC2.Types: monitorInstancesResponseInstanceMonitoringState :: MonitorInstancesResponse -> InstanceMonitoringState
+ AWS.EC2.Types: placementGroupGroupName :: PlacementGroup -> Text
+ AWS.EC2.Types: placementGroupState :: PlacementGroup -> PlacementGroupState
+ AWS.EC2.Types: placementGroupStrategy :: PlacementGroup -> PlacementGroupStrategy
- AWS.EC2.Types: InstanceNetworkInterfaceAssociation :: Text -> Text -> InstanceNetworkInterfaceAssociation
+ AWS.EC2.Types: InstanceNetworkInterfaceAssociation :: IPv4 -> Maybe Text -> Text -> InstanceNetworkInterfaceAssociation
- AWS.EC2.Types: NetworkInterface :: Text -> Text -> Text -> Text -> Text -> Text -> Maybe Text -> Text -> NetworkInterfaceStatus -> Text -> IPv4 -> Maybe Text -> Bool -> [Group] -> Maybe NetworkInterfaceAttachment -> Maybe NetworkInterfaceAssociation -> [ResourceTag] -> [NetworkInterfacePrivateIpAddress] -> NetworkInterface
+ AWS.EC2.Types: NetworkInterface :: Text -> Text -> Text -> Text -> Maybe Text -> Text -> Maybe Text -> Text -> NetworkInterfaceStatus -> Text -> IPv4 -> Maybe Text -> Bool -> [Group] -> Maybe NetworkInterfaceAttachment -> Maybe NetworkInterfaceAssociation -> [ResourceTag] -> [NetworkInterfacePrivateIpAddress] -> NetworkInterface
- AWS.EC2.Types: Snapshot :: Text -> Text -> SnapshotStatus -> UTCTime -> Text -> Text -> Int -> Text -> Maybe Text -> [ResourceTag] -> Snapshot
+ AWS.EC2.Types: Snapshot :: Text -> Maybe Text -> SnapshotStatus -> UTCTime -> Maybe Text -> Text -> Int -> Maybe Text -> Maybe Text -> [ResourceTag] -> Snapshot
- AWS.EC2.Types: instanceNetworkInterfaceAssociationPublicIp :: InstanceNetworkInterfaceAssociation -> Text
+ AWS.EC2.Types: instanceNetworkInterfaceAssociationPublicIp :: InstanceNetworkInterfaceAssociation -> IPv4
- AWS.EC2.Types: networkInterfaceDescription :: NetworkInterface -> Text
+ AWS.EC2.Types: networkInterfaceDescription :: NetworkInterface -> Maybe Text
- AWS.EC2.Types: snapshotDescription :: Snapshot -> Text
+ AWS.EC2.Types: snapshotDescription :: Snapshot -> Maybe Text
- AWS.EC2.Types: snapshotProgress :: Snapshot -> Text
+ AWS.EC2.Types: snapshotProgress :: Snapshot -> Maybe Text
- AWS.EC2.Types: snapshotVolumeId :: Snapshot -> Text
+ AWS.EC2.Types: snapshotVolumeId :: Snapshot -> Maybe Text
Files
- AWS/EC2.hs +2/−0
- AWS/EC2/Instance.hs +34/−0
- AWS/EC2/PlacementGroup.hs +61/−0
- AWS/EC2/Types.hs +40/−6
- AWS/Lib/FromText.hs +4/−2
- AWS/Lib/Parser.hs +1/−1
- AWS/Lib/Query.hs +1/−1
- Tests/Main.hs +1/−0
- aws-sdk.cabal +2/−1
AWS/EC2.hs view
@@ -35,6 +35,7 @@ , module AWS.EC2.Acl , module AWS.EC2.RouteTable , module AWS.EC2.Route+ , module AWS.EC2.PlacementGroup ) where import Data.Conduit@@ -65,6 +66,7 @@ import AWS.EC2.RouteTable import AWS.EC2.NetworkInterface import AWS.EC2.NetworkInterfaceAttribute+import AWS.EC2.PlacementGroup -- | set endpoint to EC2 context by giving the EC2 region. setRegion
AWS/EC2/Instance.hs view
@@ -14,6 +14,8 @@ , describeInstanceAttribute , resetInstanceAttribute , modifyInstanceAttribute+ , monitorInstances+ , unmonitorInstances ) where import Data.Text (Text)@@ -40,6 +42,7 @@ -> [Filter] -- ^ Filters -> EC2 m (ResumableSource m Reservation) describeInstances instances filters = do+-- ec2QueryDebug "DescribeInstances" params ec2QuerySource "DescribeInstances" params $ itemConduit "reservationSet" reservationSink where@@ -180,6 +183,7 @@ instanceNetworkInterfaceAssociationSink = elementM "association" $ InstanceNetworkInterfaceAssociation <$> getT "publicIp"+ <*> getT "publicDnsName" <*> getT "ipOwnerId" ------------------------------------------------------------@@ -547,3 +551,33 @@ "GroupId" |.#= a miap (ModifyInstanceAttributeRequestEbsOptimized a) = "EbsOptimized" |= toText a++------------------------------------------------------------+-- MonitorInstances+------------------------------------------------------------+monitorInstances+ :: (MonadResource m, MonadBaseControl IO m)+ => [Text] -- ^ InstanceIds+ -> EC2 m (ResumableSource m MonitorInstancesResponse)+monitorInstances iids =+ ec2QuerySource "MonitorInstances" ["InstanceId" |.#= iids]+ monitorInstancesResponseSink++monitorInstancesResponseSink+ :: (MonadResource m, MonadBaseControl IO m)+ => Conduit Event m MonitorInstancesResponse+monitorInstancesResponseSink = itemConduit "instancesSet" $+ MonitorInstancesResponse+ <$> getT "instanceId"+ <*> element "monitoring" (getT "state")++------------------------------------------------------------+-- UnmonitorInstances+------------------------------------------------------------+unmonitorInstances+ :: (MonadResource m, MonadBaseControl IO m)+ => [Text] -- ^ InstanceIds+ -> EC2 m (ResumableSource m MonitorInstancesResponse)+unmonitorInstances iids =+ ec2QuerySource "UnmonitorInstances" ["InstanceId" |.#= iids]+ monitorInstancesResponseSink
+ AWS/EC2/PlacementGroup.hs view
@@ -0,0 +1,61 @@+{-# LANGUAGE FlexibleContexts #-}+module AWS.EC2.PlacementGroup+ ( describePlacementGroups+ , createPlacementGroup+ , deletePlacementGroup+ ) where++import Control.Applicative ((<$>), (<*>))+import Data.Conduit+import Data.Text (Text)+import Data.XML.Types (Event)++import AWS.EC2.Internal (EC2, itemConduit)+import AWS.EC2.Query (ec2Query, ec2QuerySource)+import AWS.EC2.Types (Filter, PlacementGroup(..), PlacementGroupStrategy(..))+import AWS.Lib.Parser (getT)+import AWS.Lib.Query ((|=), (|.#=), filtersParam)++describePlacementGroups+ :: (MonadResource m, MonadBaseControl IO m)+ => [Text] -- ^ Placement group names.+ -> [Filter] -- ^ Filters+ -> EC2 m (ResumableSource m PlacementGroup)+describePlacementGroups groupNames filters =+ ec2QuerySource "DescribePlacementGroups" params $+ itemConduit "placementGroupSet" placementGroupSink+ where+ params =+ [ "GroupName" |.#= groupNames+ , filtersParam filters+ ]++placementGroupSink :: MonadThrow m => GLSink Event m PlacementGroup+placementGroupSink =+ PlacementGroup+ <$> getT "groupName"+ <*> getT "strategy"+ <*> getT "state"++createPlacementGroup+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ A name for the placement group.+ -> PlacementGroupStrategy -- ^ The placement group strategy.+ -> EC2 m Bool+createPlacementGroup groupName strategy =+ ec2Query "CreatePlacementGroup" params $ getT "return"+ where+ params =+ [ "GroupName" |= groupName+ , "Strategy" |= stringifyStrategy strategy+ ]++stringifyStrategy :: PlacementGroupStrategy -> Text+stringifyStrategy PlacementGroupStrategyCluster = "cluster"++deletePlacementGroup+ :: (MonadResource m, MonadBaseControl IO m)+ => Text -- ^ The name of the placement group.+ -> EC2 m Bool+deletePlacementGroup groupName =+ ec2Query "DeletePlacementGroup" ["GroupName" |= groupName] $ getT "return"
AWS/EC2/Types.hs view
@@ -63,6 +63,7 @@ , IpPermission(..) , KeyPair(..) , ModifyInstanceAttributeRequest(..)+ , MonitorInstancesResponse(..) , LaunchPermission(..) , LaunchPermissionItem(..) , NetworkAcl(..)@@ -78,6 +79,9 @@ , NetworkInterfaceStatus(..) , PasswordData(..) , Placement(..)+ , PlacementGroup(..)+ , PlacementGroupState(..)+ , PlacementGroupStrategy(..) , Platform(..) , PortRange(..) , ProductCode(..)@@ -422,10 +426,29 @@ } deriving (Show, Read, Eq) +data PlacementGroup = PlacementGroup+ { placementGroupGroupName :: Text+ , placementGroupStrategy :: PlacementGroupStrategy+ , placementGroupState :: PlacementGroupState+ }+ deriving (Show, Read, Eq)++data PlacementGroupState+ = PlacementGroupStatePending+ | PlacementGroupStateAvailable+ | PlacementGroupStateDeleting+ | PlacementGroupStateDeleted+ deriving (Show, Read, Eq)++data PlacementGroupStrategy+ = PlacementGroupStrategyCluster+ deriving (Show, Read, Eq)+ data InstanceMonitoringState = MonitoringDisabled | MonitoringEnabled | MonitoringPending+ | MonitoringDisabling deriving (Show, Read, Eq) data Architecture = I386 | X86_64 deriving (Show, Read, Eq)@@ -482,7 +505,9 @@ data InstanceNetworkInterfaceAssociation = InstanceNetworkInterfaceAssociation- { instanceNetworkInterfaceAssociationPublicIp :: Text+ { instanceNetworkInterfaceAssociationPublicIp :: IPv4+ , instanceNetworkInterfaceAssociationPublicDnsName+ :: Maybe Text , instanceNetworkInterfaceAssociationIpOwnerId :: Text } deriving (Show, Read, Eq)@@ -578,15 +603,22 @@ } deriving (Show, Read, Eq) +data MonitorInstancesResponse = MonitorInstancesResponse+ { monitorInstancesResponseInstanceId :: Text+ , monitorInstancesResponseInstanceMonitoringState+ :: InstanceMonitoringState+ }+ deriving (Show, Read, Eq)+ data Snapshot = Snapshot { snapshotId :: Text- , snapshotVolumeId :: Text+ , snapshotVolumeId :: Maybe Text , snapshotStatus :: SnapshotStatus , snapshotStartTime :: UTCTime- , snapshotProgress :: Text+ , snapshotProgress :: Maybe Text , snapshotOwnerId :: Text , snapshotVolumeSize :: Int- , snapshotDescription :: Text+ , snapshotDescription :: Maybe Text , snapshotOwnerAlias :: Maybe Text , snapshotTagSet :: [ResourceTag] }@@ -1235,7 +1267,7 @@ , networkInterfaceSubnetId :: Text , networkInterfaceVpcId :: Text , networkInterfaceAvailabilityZone :: Text- , networkInterfaceDescription :: Text+ , networkInterfaceDescription :: Maybe Text , networkInterfaceOwnerId :: Text , networkInterfaceRequesterId :: Maybe Text , networkInterfaceRequesterManaged :: Text@@ -1337,7 +1369,7 @@ deriveFromText "InstanceStatusTypeStatus" ["ok", "impaired", "insufficient-data", "not-applicable"] deriveFromText "InstanceMonitoringState"- ["disabled", "enabled", "pending"]+ ["disabled", "enabled", "pending", "disabling"] deriveFromText "Architecture" ["i386", "x86_64"] deriveFromText "SnapshotStatus" ["pending", "completed", "error"] deriveFromText "VolumeState"@@ -1377,3 +1409,5 @@ deriveFromText "InternetGatewayAttachmentState" ["attaching", "attached", "detaching", "detached", "available"] deriveFromText "NetworkInterfaceStatus" ["available", "in-use", "pending"]+deriveFromText "PlacementGroupState" ["pending", "available", "deleting", "deleted"]+deriveFromText "PlacementGroupStrategy" ["cluster"]
AWS/Lib/FromText.hs view
@@ -39,7 +39,7 @@ where fromText = return . join . fromTextMay fromMaybeText _name Nothing = return Nothing- fromMaybeText _name (Just t) = fromText t >>= return . Just+ fromMaybeText _name (Just t) = return $ fromTextMay t fromTextMay = Just . fromTextMay instance FromText Int@@ -50,7 +50,9 @@ instance FromText Text where- fromTextMay = Just+ fromTextMay t+ | t == "" = Nothing+ | otherwise = Just t instance FromText Bool where
AWS/Lib/Parser.hs view
@@ -27,7 +27,7 @@ import qualified Data.Conduit.List as CL import qualified Text.XML.Stream.Parse as XML import Control.Applicative-import Data.Monoid+import Data.Monoid ((<>)) import Control.Monad.Trans.Class (lift) import AWS.Class
AWS/Lib/Query.hs view
@@ -98,7 +98,7 @@ filtersParam :: [Filter] -> QueryParam filtersParam filters = "Filter" |.#. transpose [keyParams, valParams] where- keyParams = map (("Key" |=) . fst) filters+ keyParams = map (("Name" |=) . fst) filters valParams = map (("Value" |.#=) . snd) filters maybeParam :: Maybe QueryParam -> QueryParam
Tests/Main.hs view
@@ -27,6 +27,7 @@ runKeyPairTests runNetworkInterfaceTests runNetworkInterfaceAttributeTests+ runPlacementGroupTests -- RDS Tests runDBInstanceTests
aws-sdk.cabal view
@@ -1,5 +1,5 @@ name: aws-sdk-version: 0.9.0.0+version: 0.9.1.0 synopsis: AWS SDK for Haskell description: AWS (Amazon Web Services) sdk for Haskell. .@@ -53,6 +53,7 @@ , AWS.EC2.NetworkInterfaceAttribute , AWS.EC2.Tag , AWS.EC2.Params+ , AWS.EC2.PlacementGroup , AWS.Lib.FromText , AWS.Lib.Parser , AWS.Lib.Query