{-# LANGUAGE FlexibleContexts, CPP #-} module AWS.EC2.KeyPair ( describeKeyPairs , createKeyPair , deleteKeyPair , importKeyPair ) where import Data.Text (Text) import Data.XML.Types (Event) import Data.Conduit import Control.Applicative #if MIN_VERSION_conduit(1,1,0) import Control.Monad.Trans.Resource (MonadThrow, MonadBaseControl, MonadResource) #endif import AWS.EC2.Internal import AWS.EC2.Types import AWS.EC2.Query import AWS.Lib.Parser describeKeyPairs :: (MonadResource m, MonadBaseControl IO m) => [Text] -- ^ PublicIps -> [Filter] -- ^ Filters -> EC2 m (ResumableSource m KeyPair) describeKeyPairs names filters = ec2QuerySource "DescribeKeyPairs" params $ itemConduit "keySet" keyPairSink where params = [ "KeyName" |.#= names , filtersParam filters ] keyPairSink :: MonadThrow m => Consumer Event m KeyPair keyPairSink = KeyPair <$> getT "keyName" <*> getT "keyFingerprint" createKeyPair :: (MonadResource m, MonadBaseControl IO m) => Text -- ^ KeyName -> EC2 m (KeyPair, Text) -- ^ KeyPair and KeyMaterial createKeyPair name = ec2Query "CreateKeyPair" ["KeyName" |= name] $ (,) <$> keyPairSink <*> getT "keyMaterial" deleteKeyPair :: (MonadResource m, MonadBaseControl IO m) => Text -- ^ KeyName -> EC2 m Bool deleteKeyPair = ec2Delete "DeleteKeyPair" "KeyName" importKeyPair :: (MonadResource m, MonadBaseControl IO m) => Text -- ^ KeyName -> Text -- ^ PublicKeyMaterial -> EC2 m KeyPair importKeyPair name material = ec2Query "ImportKeyPair" params keyPairSink where params = [ "KeyName" |= name , "PublicKeyMaterial" |= material ]